Den här artikeln innehåller grundläggande SQL CREATE TABLE
uttalanden som nybörjare kan använda för att skapa grundläggande tabeller för sina databasprojekt.
Grundläggande syntax
Den grundläggande syntaxen för att skapa tabeller i SQL ser ut så här:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Var:
TableName
är namnet du vill ge bordetColumn1
, etc är namnen du ger dina kolumnerdatatype
är den datatyp som du tilldelar varje kolumn. De flesta RDBMS kräver att du tilldelar en datatyp till varje kolumn. I SQLite är det valfritt.optional_constraints
är en valfri lista över begränsningar som du tillämpar mot en kolumn.
Observera att de flesta DBMS:er använder en mer komplex syntax än denna (dvs de erbjuder fler alternativ), men detta är i allmänhet den grundläggande syntaxen som krävs för att skapa en tabell. De flesta nybörjare börjar med den här syntaxen och lär sig sedan mer avancerade alternativ allt eftersom de utvecklas.
Grundläggande exempel
Här är ett grundläggande exempel:
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
);
Här är några punkter att notera:
- Tabell- och kolumnnamn kan vara i alla fall. Till exempel istället för
PetId
Jag kunde ha kallat detpetid
,PETID
, ellerpet_id
. Vissa DBMS:er (t.ex. Postgres) är skiftlägeskänsliga när du frågar efter tabeller och deras kolumnnamn, medan andra inte är det (t.ex. SQL Server). - Vissa DBMS använder olika namn för sina datatyper.
NOT NULL
är en tabellrestriktion som anger att denna kolumn måste innehålla ett värde (dvs. den kan inte innehållaNULL
värden).NULL
betyder att kolumnen tillåts innehållaNULL
värden. Vissa DBMS:er (som DB2) stöder inteNULL
nyckelord, och därför måste du utelämna det när du arbetar med sådana DBMS.PRIMARY KEY
lägger till en primärnyckelrestriktion i tabellen. Det är bra att ange en primärnyckel på alla dina tabeller.- Om en tabell med samma namn redan finns i databasen får du ett felmeddelande. Du måste släppa den befintliga tabellen eller ändra den (eller ändra namnet på den du skapar).
Skapa en tabell med främmande nycklar
Följande exempel skapar en tabell med två främmande nycklar. Främmande nycklar används för att skapa en relation mellan två 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
sats används för att definiera en främmande nyckel mot två kolumner. I vårt fall tvingar de främmande nycklarna följande:
Pets.PetTypeId
kolumnen refererar tillPetTypes.PetTypeId
kolumnen (vilket värde som helst som går in iPets.PetTypeId
kolumnen måste ha ett matchande värde iPetTypes.PetTypeId
kolumn).Pets.OwnerId
kolumnen refererar tillOwners.OwnerId
kolumnen (vilket värde som helst som går in iPets.OwnerId
kolumnen måste ha ett matchande värde iOwners.OwnerId
kolumn).
Främmande nycklar kan också läggas till senare med ALTER TABLE
uttalande om det behövs.
Skapa en tabell med DEFAULT Constraint
Följande exempel skapar en tabell 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
);
Skapa en tabell med en tidsstämpelkolumn
Du kan använda DEFAULT
begränsningar för att automatiskt infoga aktuellt datum och tid i en kolumn när en ny rad infogas. Detta kallas ofta för att infoga en tidsstämpel.
Olika DBMS använder olika funktioner för att returnera det aktuella datumet.
Här är ett exempel på hur du gör 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
är ANSI-motsvarigheten till GETDATE()
funktion.
Du kan alternativt använda SYSDATETIME()
för en högre precision tidsstämpel:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
För att stödja den högre precisionen måste kolumnens datatyp vara datetime2 .
SQL Server har en hel del datatyper för datum/tidsvärden. Se SQL Servers datum- och tidsfunktioner för en lista.
Varje DBMS har sina egna funktioner för att returnera datum och tid. Här är en lista över de viktigaste:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE eller NOW() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL-server | CURRENT_TIMESTAMP , GETDATE() eller SYSDATETIME() |
SQLite | datetime('now') |
Se även:
- SQL-serverns datum- och tidsfunktioner
- SQLite datum och tid funktioner
Skapa en kolumn med ett automatiskt ökande värde
Ibland behöver du skapa en kolumn som automatiskt ökar ett värde när en ny rad infogas. Dessa kallas vanligtvis kolumner för "automatisk ökning" eller "identitet", beroende på vilket DBMS som används.
I SQL Server, använd 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 det här fallet använder vi IDENTITY(1,1)
.
- Den första
1
är fröet. Detta anger vilket värde som ska starta räkningen (dvs detta är värdet på den allra första raden som infogas i tabellen). - Den andra
1
är ökningen. Detta är det inkrementella värdet som läggs till identitetsvärdet för den föregående raden som laddades.
Varje DBMS har sitt eget nyckelord för att skapa en kolumn för automatisk ökning.
- Använd
AUTO_INCREMENT
i MySQL och MariaDb - I SQLite har du ett par alternativ (inklusive
AUTOINCREMENT
sökord) - I PostgreSQL, använd
SERIAL
- Från Oracle Database 12c , kan du nu använda nyckelordet IDENTITY för att skapa automatiskt ökande kolumner. Ett exempel kan se ut så här:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Avancerade alternativ
De flesta DBMS låter dig ange avancerade alternativ när du skapar tabeller. Vilka alternativ som är tillgängliga beror till stor del på ditt DBMS.
Se din DBMS-dokumentation om du behöver alternativ som inte anges i den här artikeln.
Många avancerade alternativ kan ställas in via GUI (beroende på vilket verktyg du använder för att ansluta till din databas). Du kan alltid skapa eller ändra en tabell via det grafiska användargränssnittet och sedan använda dess "Skript som Skapa" (eller liknande) alternativ för att se SQL-koden som du behöver köra för att skapa en sådan tabell. Du kan ta den här koden och ändra tabellnamn, kolumnnamn etc för att skapa en helt ny tabell baserat på definitionen av den tidigare.