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
PetIdJag 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ållaNULLvärden).NULLbetyder att kolumnen tillåts innehållaNULLvärden. Vissa DBMS:er (som DB2) stöder inteNULLnyckelord, och därför måste du utelämna det när du arbetar med sådana DBMS.PRIMARY KEYlä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.PetTypeIdkolumnen refererar tillPetTypes.PetTypeIdkolumnen (vilket värde som helst som går in iPets.PetTypeIdkolumnen måste ha ett matchande värde iPetTypes.PetTypeIdkolumn).Pets.OwnerIdkolumnen refererar tillOwners.OwnerIdkolumnen (vilket värde som helst som går in iPets.OwnerIdkolumnen måste ha ett matchande värde iOwners.OwnerIdkolumn).
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_INCREMENTi MySQL och MariaDb - I SQLite har du ett par alternativ (inklusive
AUTOINCREMENTsö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.