Overgang fra ER-diagram til tabellmodell

Arbeid med databaser er direkte relatert til endringstabeller og dataene de inneholder. Men før du begynner, må tabeller opprettes. For å automatisere denne prosessen, er det en spesiell en - "CREATE TABLE".

Første ting!

Før du forstår prosessen med å lage tabeller ved hjelp av MS SQL "CREATE TABLE"-kommandoen, er det verdt å dvele ved det du trenger å vite før du bruker funksjonen.

Først av alt må du komme opp med et navn for tabellen - den må være unik sammenlignet med andre i databasen, og følge flere regler. Navnet må begynne med en bokstav (a-z), etterfulgt av bokstaver, tall eller understreker, og den resulterende frasen må ikke være et reservert ord. Lengden på tabellnavnet bør ikke overstige 18 tegn.

Etter å ha bestemt deg for et navn, bør du utvikle en struktur: kom opp med navn på kolonnene, tenk på datatypen som brukes i dem og hvilke felter som må fylles ut. Her er det verdt å umiddelbart definere feltene til fremmed- og primærnøkler, samt mulige begrensninger på dataverdier.

De gjenværende nyansene i bordet kan korrigeres ganske enkelt, så på stadiet med å lage bordet er de kanskje ikke helt gjennomtenkt.

Syntaks

Etter å ha utviklet strukturen til bordet, kan du fortsette til opprettelsen. Dette kan gjøres ganske enkelt ved å bruke SQL-funksjonen "CREATE TABLE". I den er brukeren pålagt å spesifisere det tidligere oppfunne tabellnavnet og listen over kolonner, som indikerer typen og navnet for hver av dem. Funksjonssyntaksen er som følger:

CREATE TABLE tabellnavn
((kolonnenavn datatype …| tabellbegrensning)
[,(column_name datatype …| table_constraint)]…)

Argumentene brukt i funksjonskonstruksjonen betyr følgende:

  • tabellnavn - tabellnavn
  • kolonnenavn - kolonnenavn
  • datatype - datatype brukt i dette feltet
  • DEFAULT er standarduttrykket som brukes i kolonnen.

Det er også mulig å bruke ytterligere to funksjonsargumenter:

  • column_constraint - kolonneparametere
  • table_constraint - tabellparametere

I dem kan brukeren spesifisere begrensningene som kreves for arbeid eller betingelsene for å fylle ut tabellen.

Funksjoner for å lage tabeller

Når du skriver en spørring med en funksjon, er det noen ganger nødvendig å sette regler for utfylling av felt. For å gjøre dette må du legge til spesielle funksjonsattributter som definerer et bestemt sett med betingelser.

For å finne ut om en celle kan inneholde en tom verdi, etter å ha spesifisert navn og type for kolonnen, bør du skrive inn ett av nøkkelordene: NULL (det kan være tomme verdier) eller IKKE NULL (feltet må fylles ut).

Når du oppretter en tabell, må du i de fleste tilfeller forene hver post for å unngå å ha to identiske. For å gjøre dette brukes oftest linjenummerering. Og for ikke å kreve at brukeren skal vite det siste nummer eksisterende i tabellen, i "CREATE TABLE"-funksjonen er det nok å spesifisere primærnøkkelkolonnen ved å skrive nøkkelord"Primærnøkkel" etter det tilsvarende feltet. Oftest er det ved primærnøkkelen at tabellene kobles til hverandre.

For å sikre sammenkobling med primærnøkkelen, brukes den fremmednøkkelegenskapen "FOREIGN KEY". Ved å spesifisere denne egenskapen for en kolonne, kan du sikre at dette feltet vil inneholde en verdi som samsvarer med en av de i primærnøkkelkolonnen i den samme eller en annen tabell. På denne måten kan datakonsistens sikres.

For å gi en sjekk mot et spesifisert sett eller definisjon, bør du bruke CHECK-attributtet. Den er skrevet sist i listen over funksjonsargumenter og har noen personlige parametere logisk uttrykk. Med dens hjelp kan du begrense listen over mulige verdier, for eksempel ved å bruke bare bokstavene "M" og "F" i tabellfeltet "Kjøn".

I tillegg til de som er presentert, har funksjonen mange mer spesifikke attributter, men de brukes mye sjeldnere i praksis.

Eksempler

For fullt ut å forstå prinsippet om funksjonen til funksjonen, er det verdt å vurdere i praksis hvordan CREATE TABLE (SQL) fungerer. Eksemplet nedenfor lager tabellen vist i figuren:

LAG TABELL Egendefinert
(ID CHAR(10) IKKE NULL Primærnøkkel,
Custom_name CHAR(20),
Custom_address CHAR(30),
Custom_city CHAR(20),
Custom_Country CHAR(20),
ArcDate CHAR(20))

Som du kan se, parameteren mulig fravær verdier i en celle (NULL) kan utelates da det er standard.

Etter å ha opprettet tomme tabeller, er det neste logiske trinnet å fylle dem med data og oppdatere disse dataene. Det er et par utsagn i Transact-SQL for dette: SETT INN - OPPDATERING.

Imidlertid er det ofte på et sent stadium av utformingen behov for å endre selve tabellskjemaet. For eksempel hvis primærnøkkelen eller datatypen til en kolonne er endret. For ikke å slette gamle tabeller og ikke lage dem igjen ved hjelp av CREATE TABLE med riktige parametere, brukes ALTER TABLE-setningen. Anvendelsen av disse tre konstruksjonene er diskutert nedenfor.

Fylling av tabeller

Du kan fylle en tabell med data ved å bruke CREATE TABLE-setningen, men en mer effektiv tilnærming er å skille tabelloppretting og fylle den, spesielt for nybegynnere i SQL, fordi:

  • visuelt klarere;
  • Det er mer praktisk hvis tabellene er fylt i etapper.

For å få følgende tabellvisning:

ID. Leietaker

Fødselsdato

Leilighet nummer

Epostadresse

Aleksin. V.V.

Gorbunov D.D.

[e-postbeskyttet]

Simonova K.R

Dormitotova K.S.

[e-postbeskyttet]

Du må lage den ved å bruke LAG BORD og fyll den ut med INSERT-setningen. Neste instruksjoner legger til én rad i huskamerattabellen vi allerede har laget:

Slett forrige versjon bord DROP TABLE huskamerater; -- Lag en tabell. CREATE TABLE housemates(housemeateID int NOT NULL CONSTRAINT primary_id PRIMARY KEY, housemateName nvarchar(30) NOT NULL, BithDate date NOT NULL, apartmentnumber int NOT NULL, Email nvarchar(30)); -- Sett inn data i tabellen BRUK GO INSERT INTO ( , , , ,) VALUES (100,"Aleksin V.V.","19721122",11," [e-postbeskyttet]"), (101,"Gorbunov D.D.","19220525",25," [e-postbeskyttet]"), (102," Simonova K.R. "," 19560211 ", 13," [e-postbeskyttet]"), (103,"Dormitotova K.S.","19770815",9," [e-postbeskyttet]")

I eksemplet ovenfor må vi skille mellom to blokker av INSERT-konstruksjonen:

INN I- peker på tabellen som data legges inn i

VERDIER- initialisering av linjeinngang.

I parametrene (i parentes) til blokken INN I Kolonnene er oppført i den rekkefølgen de vises. En oppføring uten parametere er akseptabel hvis rekkefølgen på kolonnene når du oppretter tabellen og fyller den er den samme. Følgende kode er identisk med den forrige:

INSERT INTO VALUES (100,"Aleksin. V.V.","19721122",11," [e-postbeskyttet]"), (101,"Gorbunov D.D.","19220525",25," [e-postbeskyttet]"), (102," Simonova K.R. "," 19560211 ", 13," [e-postbeskyttet]"), (103,"Dormitotova K.S.","19770815",9," [e-postbeskyttet]")

Hvis du må endre påfyllingsrekkefølgen, må dette angis eksplisitt:

SETTE INN I (,,, ,) VERDIER ("Alexin. V.V.",101,"19721122"," [e-postbeskyttet]",11), ("Gorbunov D.D.",102,"19220525"," [e-postbeskyttet]",25), ("Simonova K.R",103,"19560211"," [e-postbeskyttet]",13) ("Dormitotova K.S.",104,"19770815"," [e-postbeskyttet]",9)

I VALUES-blokken utføres rad-for-rad initialisering i rekkefølgen til kolonnene i INTO-blokken. Radutfylling er en liste over celleverdier i parentes. Verdier er oppført atskilt med komma, og linjer er atskilt fra hverandre.

Du kan bruke INSERT-konstruksjonen bare på de kolonnene som ennå ikke inneholder data. Ellers vil en forespørselsfeil oppstå.

Oppdatering av en tabell

Behovet for å oppdatere tabeller oppstår dersom det er nødvendig å endre data som allerede er lagt inn i tabellen. Utføres ved bruk av instruksjoner OPPDATER. Hvis INSERT bare fungerer med tomme tabeller, fungerer UPDATE kun med fylte. Hvis forespørselen er adressert til tomme celler, vil det oppstå en feil.

Følgende kode vil tilordne en ny Postkasse til en beboer i et hus med identifikasjonsnummer 103.

OPPDATERING huskamerater SET E-post = " [e-postbeskyttet]" WHERE housemeateID = 103

Blokkere SETT- Dette er en blokk med endringer. Hvis du trenger å oppdatere verdien til flere celler, er de oppført atskilt med komma.

OPPDATERING huskamerater SET E-post = " [e-postbeskyttet]", housemateName = "Rurik S.S." WHERE housemeateID = 103

Endre et bord

På de senere stadiene av design eller etter utviklingen av basen, oppstår ofte behovet:

  • legge til eller fjerne en kolonne;
  • endre kolonnetype;
  • angi en kolonne eller gruppe med kolonner som en primær- eller fremmednøkkel, eller fjern disse begrensningene.

For alle disse operasjonene er det en overstyringsinstruksjon. ATER BORD.

For å legge til en kolonne, brukes ALTER TABLE-setningen med ADD-leddet. La oss legge til en ny kolonne i huskamerattabellen fra forrige seksjon:

ALTER TABLE huskamerater ADD PhoneNumber nvarchar(12) NULL;

Du må bruke en setning på den ENDRE KOLONNE inne i ALTER TABELL:

ALTER TABLE huskamerater ALTER COLUMN Telefonnummer char(25) NOT NULL;

Fjerner en kolonne ved hjelp av SLIPPE KOLONNE inne i ALTER TABELL:

ALTER TABLE huskamerater SLIPP KOLONNE Telefonnummer;

Primær- eller fremmednøkkelen fjernes og legges til ved å bruke henholdsvis ALTER TABLE ADD CONSTRAINT/DROP CONSTRAINT-konstruksjonene:

Fjern en primærnøkkelbegrensning fra housemeateID-kolonnen ALTER TABLE housemates DROP CONSTRAINT primary_id; --Tilordne housemeateID-kolonnen som primærnøkkel ALTER TABLE housemates ADD CONSTRAINT PK_ID PRIMARY KEY (housemeateID);

Hvis du prøver å tilordne en primærnøkkel til en tabell som allerede er der, vil spørringsoversetteren returnere en feil. Derfor, hvis tabellen allerede har en primærnøkkel, bør du fjerne den og angi en gruppe kolonner som primærnøkkel. For eksempel slik:

ENDRE TABELL huskamerater SLIPP BEGRENSNING PK_ID; ALTER TABLE huskamerater LEGG TIL BEGRENSNING PK_ID,PK_EN PRIMÆR NØKKEL (husmeatID, leilighetsnummer);

SQL - Leksjon 3. Lage tabeller og fylle dem med informasjon

Så vi ble kjent med datatyper, nå skal vi forbedre tabellene for forumet vårt. La oss se på dem først. Og la oss starte med brukertabellen. Vi har 4 kolonner i den:

Id_user er heltallsverdier, noe som betyr at typen vil være int, la oss begrense den til 10 tegn - int (10).
navn er en varchar-strengverdi, la oss begrense den til 20 tegn - varchar(20).
e-post er en varchar-strengverdi, la oss begrense den til 50 tegn - varchar(50).
passord er en varchar-strengverdi, vi vil begrense den til 15 tegn - varchar(15).

Alle feltverdier er obligatoriske, noe som betyr at du må legge til typen NOT NULL.

Id_user int (10) IKKE NULL
navn varchar(20) IKKE NULL
e-post varchar(50) IKKE NULL

Den første kolonnen, som du husker fra den konseptuelle modellen til databasen vår, er primærnøkkelen (det vil si at verdiene er unike og de identifiserer posten unikt). Det er mulig å overvåke unikhet på egen hånd, men det er ikke rasjonelt. Det er en spesiell egenskap i SQL for dette - AUTO_INCREMENT, som når du får tilgang til tabellen for å legge til data, beregner maksimalverdien for denne kolonnen, øker den resulterende verdien med 1 og legger den inn i kolonnen. Dermed genereres et unikt nummer automatisk i denne kolonnen, og derfor er NOT NULL-typen overflødig. Så la oss tilordne et attributt til kolonnen med primærnøkkelen:


navn varchar(20) IKKE NULL
e-post varchar(50) IKKE NULL
passord varchar(15) IKKE NULL

Nå må vi spesifisere at id_user-feltet er primærnøkkelen. For å gjøre dette bruker SQL nøkkelordet PRIMÆRNØKKEL(), er navnet på nøkkelfeltet angitt i parentes. La oss gjøre endringer:

Id_user int (10) AUTO_INCREMENT
navn varchar(20) IKKE NULL
e-post varchar(50) IKKE NULL
passord varchar(15) IKKE NULL
PRIMÆR NØKKEL (id_user)

Så, bordet er klart, og den endelige versjonen ser slik ut:

Opprett tabellbrukere (
id_user int (10) AUTO_INCREMENT,
navn varchar(20) IKKE NULL,
e-post varchar(50) NOT NULL,
passord varchar(15) NOT NULL,
PRIMÆR NØKKEL (id_user)
);

La oss nå se på den andre tabellen - emner. På samme måte har vi følgende felt:



id_author int (10) IKKE NULL
PRIMÆR NØKKEL (id_topic)

Men i vår databasemodell er id_author-feltet en fremmednøkkel, dvs. den kan bare ha verdiene som er i id_user-feltet i brukertabellen. For å indikere dette i SQL er det et nøkkelord UTENLANDSKE NØKKEL(), som har følgende syntaks:

UTENLANDSKE NØKKEL (kolonne_navn_som_er_fremmed_nøkkel) REFERANSER overordnet_tabellnavn (overordnet_kolonne_navn);

La oss indikere at id_author er en fremmednøkkel:

Id_topic int (10) AUTO_INCREMENT
topic_name varchar(100) IKKE NULL
id_author int (10) IKKE NULL
PRIMÆR NØKKEL (id_topic)
FOREIGN KEY (id_author) REFERENCES brukere (id_user)

Bordet er klart, og den endelige versjonen ser slik ut:

Lag tabellemner (
id_topic int (10) AUTO_INCREMENT,
topic_name varchar(100) NOT NULL,

PRIMÆR NØKKEL (id_topic),
FOREIGN KEY (id_author) REFERENCES brukere (id_user)
);

Det siste bordet igjen er innlegg. Alt er likt her, bare to fremmednøkler:

Lag tabellinnlegg (
id_post int (10) AUTO_INCREMENT,
meldingstekst IKKE NULL,
id_author int (10) IKKE NULL,
id_topic int (10) IKKE NULL,
PRIMÆR NØKKEL (id_post),
FOREIGN KEY (id_author) REFERENCES brukere (id_user),
FOREIGN KEY (id_topic) REFERENCES emner (id_topic)
);

Vær oppmerksom på at en tabell kan ha flere fremmednøkler, men i MySQL kan det bare være én primærnøkkel. I den første leksjonen slettet vi forumdatabasen vår, det er på tide å lage den igjen.

La oss lansere MySQL-server(Start - Programmer - MySQL - MySQL Server 5.1 - MySQL Command Line Client), skriv inn passordet, lag et databaseforum (opprett databaseforum;), velg det for bruk (bruk forum;) og lag våre tre tabeller:

Vær oppmerksom på at én kommando kan skrives på flere linjer med Enter-tasten (MySQL erstatter automatisk symbolet ny linje->), og først etter skilletegn (semikolon) utføres spørringen ved å trykke på Enter-tasten.

Husk at hvis du gjorde noe galt, kan du alltid slippe en tabell eller hele databasen ved å bruke DROP-setningen. Fiks noe i kommandolinje ekstremt upraktisk, så noen ganger (spesielt i den innledende fasen) er det lettere å skrive spørsmål i noen editor, for eksempel Notisblokk, og deretter kopiere og lime dem inn i et svart vindu.

Så, tabellene er laget, for å være sikker på dette, la oss huske laget vise tabeller:

Og til slutt, la oss se på strukturen til tabellen over siste innlegg:

Nå blir betydningen av alle feltene i strukturen tydelige, bortsett fra STANDARD-feltet. Dette er standardverdifeltet. Vi kan spesifisere en standardverdi for en kolonne (eller alle). For eksempel, hvis vi hadde et felt kalt "Gift" og skriv ENUM ("ja", "nei"), ville det være fornuftig å gjøre en av verdiene til standardverdien. Syntaksen vil være:

Gift enum ("ja", "nei") IKKE NULL standard("ja")

De. dette nøkkelordet skrives med et mellomrom etter datatypen, og standardverdien er angitt i parentes.

Men la oss gå tilbake til bordene våre. Nå må vi legge inn data i tabellene våre. På nettsider legger du vanligvis inn informasjon i noen html-skjemaer, deretter trekker et script på et eller annet språk (php, java...) ut disse dataene fra skjemaet og legger dem inn i databasen. Han gjør dette gjennom en SQL-spørring for å legge inn data i databasen. Vi vet ennå ikke hvordan vi skriver skript i PHP, men nå skal vi lære hvordan du sender SQL-spørringer for å legge inn data.

Til dette formål brukes operatøren SETT INN. Det er to typer syntaks du kan bruke. Det første alternativet brukes til å legge inn data i alle feltene i tabellen:

INSERT INTO tabellnavn VERDIER ("first_column_value","second_column_value", ..., "last_column_value");


La oss prøve å legge til følgende verdier i brukertabellen vår:

SETTE INN I brukerVERDIER ("1","sergey", " [e-postbeskyttet]", "1111");

Det andre alternativet brukes til å legge inn data i noen felt i tabellen:

INSERT INTO tabellnavn ("kolonne_navn", "kolonne_navn") VERDIER ("første_kolonne_verdi","andre_kolonne_verdi");


I brukertabellen vår er alle felt obligatoriske, men vårt første felt har søkeordet AUTO_INCREMENT (dvs. det fylles ut automatisk), så vi kan hoppe over denne kolonnen:

INSERT I brukere (navn, e-post, passord) VERDIER ("valera", " [e-postbeskyttet]", "2222");

Hvis vi hadde felt med typen NULL, dvs. valgfritt, vi kan ignorere dem også. Men hvis du prøver å la et felt med verdien NOT NULL stå tomt, vil serveren vise en feilmelding og vil ikke fullføre forespørselen. I tillegg, når du legger inn data, sjekker serveren relasjonene mellom tabeller. Derfor vil du ikke kunne legge til en verdi i et felt som er en fremmednøkkel som ikke finnes i den relaterte tabellen. Du vil bekrefte dette ved å legge inn data i de resterende to tabellene.

Men først, la oss legge til informasjon om noen flere brukere. For å legge til flere linjer samtidig, trenger du bare å liste opp parentesene med verdier atskilt med komma:

La oss nå legge inn dataene i den andre tabellen - emner. Alt er det samme, men vi må huske at verdiene i id_author-feltet må være tilstede i brukertabellen:

La oss nå prøve å legge til et annet emne, men med id_author, som ikke er i brukertabellen (siden vi bare la til 5 brukere til brukertabellen, eksisterer ikke id=6):

Serveren kaster en feil og sier at den ikke kan gå inn på en slik linje pga et felt som er en fremmednøkkel inneholder en verdi som ikke er i den relaterte brukertabellen.

La oss nå legge til noen rader i posttabellen, og husk at vi har 2 fremmednøkler i den, dvs. id_author og id_topic, som vi skal legge inn, må være til stede i tabellene knyttet til dem:

Så vi har 3 tabeller som har data i dem. Spørsmålet oppstår - hvordan se hvilke data som er lagret i tabellene. Dette skal vi gjøre i neste leksjon.

Hvis du hadde behov for å lagre resultatsettet med data som ble returnert av en SQL-spørring, vil denne artikkelen være av interesse for deg, siden vi i den vil se på SELECT-setning INN I, ved hjelp av dette Microsoft SQL Server, du kan lage en ny tabell og fylle den med resultatet SQL-spørring.

Vi vil selvfølgelig begynne med en beskrivelse av selve SELECT INTO-setningen, og deretter gå videre til eksempler.

SELECT INTO-setning i Transact-SQL

VELG I– en instruksjon i T-SQL-språket som oppretter en ny tabell og setter inn de resulterende radene fra SQL-spørringen i den. Tabellstruktur, dvs. antall og navn på kolonner, samt datatyper og nullbarhetsegenskaper, vil være basert på kolonnene ( uttrykkene) spesifisert i kildevalgslisten i SELECT-setningen. Vanligvis brukes SELECT INTO-setningen til å kombinere data fra flere tabeller og visninger, inkludert noen beregningsdata, til én tabell.

For å bruke SELECT INTO-setningen må du ha CREATE TABLE-tillatelse i databasen der den nye tabellen skal opprettes.

SELECT INTO-setningen har to argumenter:

  • ny_tabell - navn nytt bord;
  • filgruppe – filgruppe. Hvis ingen argumenter er spesifisert, brukes standard filgruppe. Denne sjansen tilgjengelig fra og med Microsoft SQL Server 2017.

Viktige punkter om SELECT INTO-setningen

  • Instruksjonen kan brukes til å lage en tabell på gjeldende server. Tabelloppretting på en ekstern server støttes ikke;
  • Du kan fylle en ny tabell med data enten fra gjeldende database og gjeldende server, eller fra en annen database eller fra en ekstern server. Angi for eksempel fullt navn database i skjemaet databaseskjema.tabellnavn eller i tilfelle av en ekstern server, linked_server.database.schema.table_name;
  • En identitetskolonne i en ny tabell arver ikke IDENTITY-egenskapen hvis: setningen inneholder en join (JOIN, UNION), en GROUP BY-klausul, aggregert funksjon, også hvis identitetskolonnen er en del av et uttrykk, hentes fra en ekstern datakilde eller vises mer enn én gang i utvalgslisten. I alt lignende tilfeller identitetskolonnen arver ikke IDENTITY-egenskapen og opprettes som NOT NULL;
  • Du kan ikke bruke SELECT INTO-setningen til å lage en partisjonert tabell, selv om kildetabellen er partisjonert;
  • Du kan spesifisere en vanlig tabell så vel som en midlertidig tabell som en ny tabell, men du kan ikke spesifisere en tabellvariabel eller en tabellverdi parameter;
  • En beregnet kolonne, hvis det er en i utvalgslisten til SELECT INTO-setningen, blir den normal i den nye tabellen, dvs. ikke beregnelig;
  • SELECT INTO kan ikke brukes med en COMPUTE-klausul;
  • Ved å bruke SELECT INTO overføres ikke indekser, begrensninger og utløsere til den nye tabellen, de må opprettes i tillegg, etter å ha utført setningen, hvis de er nødvendige;
  • ORDER BY-klausulen garanterer ikke at radene i den nye tabellen blir satt inn i den angitte rekkefølgen.
  • FILESTREAM-attributtet overføres ikke til den nye tabellen. BLOB FILESTREAM-objektene i den nye tabellen vil være BLOB-objekter av typen varbinary(max) og har en grense på 2 GB;
  • Mengden data som skrives til transaksjonsloggen under SELECT INTO-operasjoner avhenger av gjenopprettingsmodellen. I databaser som bruker den bulkloggede gjenopprettingsmodellen, og enkel modell, er masseoperasjoner, som inkluderer SELECT INTO, minimalt logget. På grunn av dette kan SELECT INTO-setningen være mer effektiv enn separate setninger for å lage tabellen og INSERT-setninger for å fylle den med data.

Eksempler på bruk av SELECT INTO

Jeg vil kjøre alle eksemplene i Microsoft SQL Server 2016 Express DBMS.

Innledende data

La oss først lage to tabeller og fylle dem med data. Vi vil kombinere disse tabellene i eksemplene.

LAG TABELL Testtabell( IDENTITET(1,1) IKKE NULL, IKKE NULL, (100) IKKE NULL, (100) IKKE NULL, NULL) PÅ GÅ OPPRETT TABELL Testtabell2( IDENTITET(1,1) IKKE NULL, (100) IKKE NULL) PÅ GÅ INSERT I TestTable VERDIER (1,"Tastatur", 100), (1, "Mus", 50), (2, "Telefon", 300) GÅ INN INN I TestTable2 VERDIER (" Datamaskinkomponenter"), ("Mobile enheter") GÅ VELG * FRA TestTable VELG * FRA TestTable2

Eksempel 1 - Lage en tabell ved å bruke SELECT INTO med datasammenføyning

La oss forestille oss at vi må slå sammen to tabeller og lagre det resulterende resultatet i en ny tabell ( for eksempel må vi få produkter med navnet på kategorien de tilhører).

Operasjon SELECT INTO SELECT T1.ProductId, T2.CategoryName, T1.CategoryName, T1.Price INTO TestTable3 FROM TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId --Velger data fra en ny tabell SELECT * FROM


Som et resultat laget vi en tabell kalt TestTable3 og fylte den med de kombinerte dataene.

Eksempel 2 - Opprette en midlertidig tabell ved hjelp av en SELECT INTO-setning med datagruppering

La oss nå si at vi trenger grupperte data, for eksempel informasjon om antall produkter i en bestemt kategori, og vi må lagre disse dataene i en midlertidig tabell, for eksempel vil vi bruke denne informasjonen bare i SQL-setninger, så vi trenger ikke å lage en fullverdig tabell.

Opprett en midlertidig tabell (#TestTable) ved å bruke setningen SELECT INTO SELECT T2.CategoryName, COUNT(T1.ProductId) AS CntProduct INTO #TestTable FRA TestTable T1 LEFT JOIN TestTable2 T2 ON T1.CategoryId = T2.CategoryId GROUP -T2.CategoryName -CategoryId . - Henter data fra en midlertidig tabell VELG * FRA #TestTable


Som du kan se, var vi i stand til å lage en midlertidig tabell #TestTable og fylle den med grupperte data.

Så vi så på SELECT INTO-setningen i T-SQL-språket i boken min "The T-SQL Programmer's Way" Jeg snakker i detalj om alle konstruksjonene T-SQL språk (Jeg anbefaler å lese den), og det var alt for nå!

Før du kan lage en SQL-tabell, må du definere databasemodellen. Design et ER-diagram for å definere enheter, attributter og relasjoner.

Enkle konsepter

Entiteter er objekter eller fakta som informasjon må lagres om. For eksempel en ansatt i et selskap eller prosjekter iverksatt av selskapet. Attributter er komponenter som beskriver eller kvalifiserer en enhet. For eksempel er attributtet til "ansatt"-enheten lønn, og attributtet til «prosjekt»-enheten er den estimerte kostnaden. Forbindelser er assosiasjoner mellom to elementer. Det kan være toveis. Det er også en rekursiv forbindelse, det vil si forbindelsen til en enhet med seg selv.

Det er også nødvendig å bestemme nøklene og betingelsene under hvilke integriteten til databasen skal opprettholdes. Hva betyr det? Med andre ord restriksjoner som vil bidra til å holde databaser i en korrekt og konsistent form.

Overgang fra ER-diagram til tabellmodell

Regler for overgang til tabellmodell:

  1. Konverter alle enheter til tabeller.
  2. Konverter alle attributter til kolonner, det vil si at hvert enhetsattributt må vises i tabellkolonnenavnet.
  3. Konverter unike identifikatorer til primærnøkler.
  4. Konverter alle relasjoner til fremmednøkler.
  5. Lag SQL-tabellen.

Opprette en database

Først må du starte MySQL-serveren. For å starte den, gå til Start-menyen, deretter Programmer, deretter MySQL og MySQL Server, velg MySQL-Command-Line-Client.

For å opprette en database, bruk Create Database-kommandoen. Denne funksjonen har følgende format:

LAG DATABASE databasenavn.

Begrensningene for navnet på databasen er som følger:

  • lengden er opptil 64 tegn og kan inneholde bokstaver, tall, "" og ""-symboler;
  • navnet kan begynne med et tall, men det må inneholde bokstaver.

Du må huske den generelle regelen: enhver forespørsel eller kommando ender med et skilletegn. I SQL er det vanlig å bruke semikolon som skilletegn.

Serveren må angi hvilken database den må jobbe med. Det er en USE-erklæring for dette. Denne operatoren har en enkel syntaks: BRUK n databasenavn.

Opprette en SQL-tabell

Så modellen er designet, databasen er opprettet, og serveren blir fortalt nøyaktig hvordan den skal jobbe med den. Nå kan du begynne å lage SQL-tabeller. Det er Data Definition Language (DDL). Den brukes til å lage MS SQL-tabell, samt til å definere objekter og arbeide med deres struktur. DDL inkluderer et sett med kommandoer.

Oppretting av SQL Server-tabeller

Ved å bruke bare én DDL-kommando kan du lage forskjellige databaseobjekter ved å variere parameterne. Kommandoen Opprett tabell brukes. tt-formatet ser slik ut:

LAG TADLE tabellnavn,(kolonnenavn1 Navn _kolonne2 datatype [column_constraint],[table_constraints]).

Syntaksen til denne kommandoen bør beskrives mer detaljert:

  • Tabellnavnet må være på opptil 30 tegn og begynne med en bokstav. Bare alfabetiske tegn, bokstaver og symbolene "_", "$" og "#" er tillatt. Bruk av kyrillisk alfabet er tillatt. Det er viktig å merke seg at tabellnavn ikke skal være det samme som andre objektnavn eller reserverte databaseserverord som kolonne, tabell, indeks osv.
  • Du må spesifisere en datatype for hver kolonne. Det er et standardsett som brukes av de fleste. For eksempel Char, Varchar, Number, Date, Null type, etc.

  • Standardparameteren lar deg angi en standardverdi. Dette sikrer at det ikke er nullverdier i tabellen. Hva betyr det? Standardverdien kan være et symbol, et uttrykk, en funksjon. Det er viktig å huske at denne standarddatatypen må samsvare med kolonnens inputdatatype.
  • Begrensninger på hver kolonne brukes til å håndheve integritetsbetingelser for data på tabellnivå. Det er andre nyanser. Det er forbudt å slette en tabell hvis det er andre tabeller som er avhengige av den.

Hvordan jobbe med databasen

Store prosjekter krever ofte opprettelse av flere databaser, som hver krever mange tabeller. Selvfølgelig er det umulig for brukere å beholde all informasjon i hodet. For å gjøre dette er det mulig å se strukturen til databaser og tabeller i dem. Det er flere kommandoer, nemlig:

  • VIS DATABASER - viser alle opprettede SQL-databaser på skjermen;
  • SHOW TABLES - viser en liste over alle tabeller for gjeldende database som er valgt av USE-kommandoen;
  • BESKRIVE tabellnavn- viser en beskrivelse av alle tabellkolonner.
  • ALTER TABLE - lar deg endre tabellstrukturen.

Den siste kommandoen tillater:

  • legge til en kolonne eller begrensning i en tabell;
  • endre en eksisterende kolonne;
  • slette kolonne eller kolonner;
  • fjerne integritetsbegrensninger.

Syntaksen for denne kommandoen er: ALTER TABLE tabellnavn( | | | | [(AKTIVER | DEAKTIVER) KONSTANT constraint_name ] | }.

Det er andre kommandoer:

  • RENAME - gi nytt navn til tabellen.
  • TRUNCATE TABLE - fjerner alle rader fra tabellen. Denne funksjonen kan være nødvendig når det er nødvendig å fylle tabellen igjen, men det er ikke nødvendig å lagre tidligere data.

Det er også situasjoner hvor strukturen til databasen har endret seg og tabellen bør slettes. Det er en DROP-kommando for dette. Selvfølgelig må du først velge databasen du vil slette tabellen fra, hvis den er forskjellig fra den gjeldende.

Kommandosyntaksen er ganske enkel: DROP TABLE Navn_tabeller.

I SQL-tilgangå lage tabeller og endre dem utføres ved å bruke de samme kommandoene som er oppført ovenfor.

Ved å bruke CREATE TABLE kan du opprette en tom tabell og deretter fylle den med data. Men det er ikke alt. Du kan også opprette en tabell direkte fra en annen tabell. Som dette? Det vil si at det er mulig å definere en tabell og fylle den med data fra en annen tabell. Det er et spesielt nøkkelord AS for dette.

Syntaksen er veldig enkel:

  • LAG BORD Navn_tabeller[(kolonnedefinisjon)] AS underspørring;
  • kolonnedefinisjon - kolonnenavn, integritetsregler for nyopprettede tabellkolonner og standardverdier;
  • subquery - returnerer radene som må legges til i den nye tabellen.

Dermed oppretter en slik kommando en tabell med visse kolonner, setter inn rader i den, som returneres i spørringen.

Midlertidige bord

Midlertidige tabeller er tabeller hvis data slettes ved slutten av hver økt eller tidligere. De brukes til å registrere mellomverdier eller resultater. De kan brukes som arbeidsark. Du kan definere midlertidige i en hvilken som helst økt, men du kan bare bruke dataene deres i gjeldende økt. Å lage midlertidige SQL-tabeller ligner på vanlige tabeller, ved å bruke CREATE TABLE-kommandoen. For å vise systemet at tabellen er midlertidig, må du bruke parameteren GLOBAL TEMPORARY.

ON COMMIT-klausulen angir levetiden til data i en slik tabell og kan gjøre følgende:

  • SLETT RADER - slett den midlertidige tabellen (slett alle øktdata) etter hver transaksjonsfullføring. Dette er vanligvis standardverdien.
  • BEHOLD RADER - la data ligge igjen til bruk i neste transaksjon. I tillegg kan du tømme bordet først etter at økten er ferdig. Men det er noen særegenheter. Hvis en transaksjon rulles tilbake (ROLLBACK), vil tabellen bli returnert til sin tilstand ved slutten av forrige transaksjon.

Syntaksen for å lage en midlertidig tabell kan representeres som følger: CREATE TABLE Navn_tabeller,(Navn_kolonne1 datatype [column_constraint], Navn _kolonne2 datatype [column_constraint], [table_constraints]).