Denne artikel indeholder grundlæggende SQL CREATE TABLE
sætninger, som begyndere kan bruge til at oprette grundlæggende tabeller til deres databaseprojekter.
Grundlæggende syntaks
Den grundlæggende syntaks til at oprette tabeller i SQL ser sådan ud:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Hvor:
TableName
er det navn, du vil give bordetColumn1
osv. er de navne, du giver dine kolonnerdatatype
er den datatype, du tildeler hver kolonne. De fleste RDBMS'er kræver, at du tildeler en datatype til hver kolonne. I SQLite er det valgfrit.optional_constraints
er en valgfri liste over begrænsninger, som du anvender mod en kolonne.
Bemærk, at de fleste DBMS'er bruger en mere kompleks syntaks end dette (dvs. de tilbyder flere muligheder), men dette er generelt den grundlæggende syntaks, der kræves for at oprette en tabel. De fleste begyndere starter med denne syntaks og lærer derefter mere avancerede muligheder, efterhånden som de udvikler sig.
Grundlæggende eksempel
Her er et grundlæggende eksempel:
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL,
OwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL
);
Her er nogle punkter at bemærke:
- Tabel- og kolonnenavne kan være i alle tilfælde. For eksempel i stedet for
PetId
Jeg kunne have kaldt detpetid
,PETID
ellerpet_id
. Nogle DBMS'er (f.eks. Postgres) skelner mellem store og små bogstaver, når du forespørger i tabeller og deres kolonnenavne, mens andre ikke er det (f.eks. SQL Server). - Nogle DBMS'er bruger forskellige navne til deres datatyper.
NOT NULL
er en tabelbegrænsning, der specificerer, at denne kolonne skal indeholde en værdi (dvs. den kan ikke indeholdeNULL
værdier).NULL
betyder, at kolonnen må indeholdeNULL
værdier. Nogle DBMS'er (såsom DB2) understøtter ikkeNULL
nøgleord, og du bliver derfor nødt til at udelade det, når du arbejder med sådanne DBMS'er.PRIMARY KEY
tilføjer en primær nøglebegrænsning til tabellen. Det er god praksis at angive en primær nøgle på alle dine tabeller.- Hvis en tabel med samme navn allerede findes i databasen, får du en fejl. Du bliver nødt til at slette den eksisterende tabel eller ændre den (eller ændre navnet på den, du opretter).
Opret en tabel med fremmednøgler
Følgende eksempel opretter en tabel med to fremmednøgler. Fremmednøgler bruges til at skabe en relation mellem to tabeller.
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL REFERENCES PetTypes (PetTypeId),
OwnerId int NOT NULL REFERENCES Owners (OwnerId),
PetName varchar(60) NOT NULL,
DOB date NULL
);
REFERENCES
klausul bruges til at definere en fremmednøgle mod to kolonner. I vores tilfælde håndhæver de fremmede nøgler følgende:
Pets.PetTypeId
kolonnen refererer tilPetTypes.PetTypeId
kolonne (enhver værdi, der går ind iPets.PetTypeId
kolonnen skal have en matchende værdi iPetTypes.PetTypeId
kolonne).Pets.OwnerId
kolonnen refererer tilOwners.OwnerId
kolonne (enhver værdi, der går ind iPets.OwnerId
kolonnen skal have en matchende værdi iOwners.OwnerId
kolonne).
Fremmednøgler kan også tilføjes senere ved at bruge ALTER TABLE
erklæring om nødvendigt.
Opret en tabel med DEFAULT Constraint
Følgende eksempel opretter en tabel med en DEFAULT
begrænsning.
CREATE TABLE OrderItems
(
OrderId int NOT NULL PRIMARY KEY,
OrderItem int NOT NULL,
ProductId int NOT NULL,
Quantity int NOT NULL DEFAULT 1,
ItemPrice decimal(8,2) NOT NULL
);
Opret en tabel med en tidsstempelkolonne
Du kan bruge DEFAULT
begrænsninger for automatisk at indsætte den aktuelle dato og klokkeslæt i en kolonne, hver gang en ny række indsættes. Dette omtales ofte som at indsætte et tidsstempel.
Forskellige DBMS'er bruger forskellige funktioner til at returnere den aktuelle dato.
Her er et eksempel på at gøre det i SQL Server.
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
I SQL Server, CURRENT_TIMESTAMP
er ANSI-ækvivalenten til GETDATE()
funktion.
Du kan alternativt bruge SYSDATETIME()
for et tidsstempel med højere præcision:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
For at understøtte den højere præcision skal kolonnens datatype være datetime2 .
SQL Server har en del datatyper for dato/tidsværdier. Se SQL Server dato og klokkeslæt funktioner for en liste.
Hvert DBMS har sine egne funktioner til at returnere dato og klokkeslæt. Her er en liste over de vigtigste:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE eller NOW() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL-server | CURRENT_TIMESTAMP , GETDATE() eller SYSDATETIME() |
SQLite | datetime('now') |
Se også:
- SQL Server Dato- og Tidsfunktioner
- SQLite dato- og tidsfunktioner
Opret en kolonne med en automatisk stigende værdi
Nogle gange skal du oprette en kolonne, der automatisk øger en værdi, hver gang en ny række indsættes. Disse omtales typisk som "auto-increment"- eller "identity"-kolonner, afhængigt af det DBMS, der bruges.
I SQL Server skal du bruge IDENTITY
argument:
CREATE TABLE Users
(
UserId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
I dette tilfælde bruger vi IDENTITY(1,1)
.
- Den første
1
er frøet. Dette angiver, hvilken værdi der skal starte optællingen (dvs. dette er værdien af den allerførste række, der er indsat i tabellen). - Den anden
1
er stigningen. Dette er den trinvise værdi, der tilføjes til identitetsværdien for den forrige indlæste række.
Hvert DBMS har sit eget nøgleord til oprettelse af en auto-inkrementerende kolonne.
- I MySQL og MariaDb skal du bruge
AUTO_INCREMENT
- I SQLite har du et par muligheder (inklusive
AUTOINCREMENT
søgeord) - I PostgreSQL skal du bruge
SERIAL
- Fra Oracle Database 12c , kan du nu bruge nøgleordet IDENTITY til at oprette kolonner med automatisk stigning. Et eksempel kan se ud som:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Avancerede indstillinger
De fleste DBMS'er giver dig mulighed for at angive avancerede muligheder, når du opretter tabeller. De tilgængelige muligheder afhænger i høj grad af dit DBMS.
Se din DBMS-dokumentation, hvis du har brug for muligheder, der ikke er specificeret i denne artikel.
Mange avancerede muligheder kan indstilles via GUI (afhængigt af det værktøj, du bruger til at oprette forbindelse til din database). Du kan altid oprette eller ændre en tabel via GUI'en og derefter bruge dens "Script som Opret" (eller lignende) mulighed for at se den SQL-kode, du skal køre for at oprette en sådan tabel. Du kan tage denne kode og ændre tabelnavne, kolonnenavne osv. for at oprette en helt ny tabel baseret på definitionen af den forrige.