Dit artikel bevat basis SQL CREATE TABLE
instructies die beginners kunnen gebruiken om basistabellen voor hun databaseprojecten te maken.
Basissyntaxis
De basissyntaxis voor het maken van tabellen in SQL gaat als volgt:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Waar:
TableName
is de naam die u aan de tafel wilt gevenColumn1
, etc zijn de namen die u aan uw kolommen geeftdatatype
is het gegevenstype dat u aan elke kolom toewijst. De meeste RDBMS'en vereisen dat u aan elke kolom een gegevenstype toewijst. In SQLite is het optioneel.optional_constraints
is een optionele lijst met beperkingen die u op een kolom toepast.
Merk op dat de meeste DBMS'en een complexere syntaxis gebruiken dan deze (d.w.z. ze bieden meer opties), maar dit is over het algemeen de basissyntaxis die nodig is om een tabel te maken. De meeste beginners beginnen met deze syntaxis en leren daarna meer geavanceerde opties naarmate ze vorderen.
Basisvoorbeeld
Hier is een eenvoudig voorbeeld:
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
);
Hier zijn enkele aandachtspunten:
- Tabel- en kolomnamen kunnen in ieder geval zijn. Bijvoorbeeld in plaats van
PetId
Ik had hetpetid
kunnen noemen ,PETID
, ofpet_id
. Sommige DBMS'en (bijv. Postgres) zijn hoofdlettergevoelig wanneer u tabellen en hun kolomnamen opvraagt, terwijl andere dat niet zijn (bijv. SQL Server). - Sommige DBMS'en gebruiken verschillende namen voor hun gegevenstypes.
NOT NULL
is een tabelbeperking die aangeeft dat deze kolom een waarde moet bevatten (d.w.z. deze mag geenNULL
bevatten waarden).NULL
betekent dat de kolomNULL
. mag bevatten waarden. Sommige DBMS'en (zoals DB2) ondersteunen deNULL
. niet trefwoord, en u zult het dus moeten weglaten wanneer u met dergelijke DBMS'en werkt.PRIMARY KEY
voegt een primaire sleutelbeperking toe aan de tabel. Het is een goede gewoonte om een primaire sleutel op al uw tabellen op te geven.- Als er al een tabel met dezelfde naam in de database bestaat, krijg je een foutmelding. U moet de bestaande tabel verwijderen of wijzigen (of de naam wijzigen van degene die u aan het maken bent).
Maak een tabel met externe sleutels
In het volgende voorbeeld wordt een tabel gemaakt met twee externe sleutels. Buitenlandse sleutels worden gebruikt om een relatie tussen twee tabellen te maken.
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
);
De REFERENCES
clausule wordt gebruikt om een externe sleutel voor twee kolommen te definiëren. In ons geval dwingen de externe sleutels het volgende af:
- De
Pets.PetTypeId
kolom verwijst naar dePetTypes.PetTypeId
kolom (elke waarde die in dePets.PetTypeId
kolom moet een overeenkomende waarde hebben in dePetTypes.PetTypeId
kolom). - De
Pets.OwnerId
kolom verwijst naar deOwners.OwnerId
kolom (elke waarde die in dePets.OwnerId
kolom moet een overeenkomende waarde hebben in deOwners.OwnerId
kolom).
Vreemde sleutels kunnen ook later worden toegevoegd, met behulp van de ALTER TABLE
verklaring indien nodig.
Een tabel maken met DEFAULT-beperking
In het volgende voorbeeld wordt een tabel gemaakt met een DEFAULT
beperking.
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
);
Maak een tabel met een tijdstempelkolom
U kunt DEFAULT
. gebruiken beperkingen om automatisch de huidige datum en tijd in een kolom in te voegen wanneer een nieuwe rij wordt ingevoegd. Dit wordt vaak het invoegen van een tijdstempel genoemd.
Verschillende DBMS'en gebruiken verschillende functies om de huidige datum te retourneren.
Hier is een voorbeeld om het in SQL Server te doen.
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
In SQL Server, CURRENT_TIMESTAMP
is het ANSI-equivalent van de GETDATE()
functie.
U kunt ook SYSDATETIME()
. gebruiken voor een nauwkeurigere tijdstempel:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Om de hogere precisie te ondersteunen, moet het gegevenstype van de kolom datetime2 . zijn .
SQL Server heeft nogal wat datatypes voor datum/tijd-waarden. Zie SQL Server datum- en tijdfuncties voor een lijst.
Elk DBMS heeft zijn eigen functies voor het retourneren van de datum en tijd. Hier is een lijst van de belangrijkste:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE of NOW() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL-server | CURRENT_TIMESTAMP , GETDATE() of SYSDATETIME() |
SQLite | datetime('now') |
Zie ook:
- SQL Server datum- en tijdfuncties
- SQLite datum- en tijdfuncties
Maak een kolom met een automatisch oplopende waarde
Soms moet u een kolom maken die automatisch een waarde verhoogt wanneer een nieuwe rij wordt ingevoegd. Deze worden meestal “auto-increment” of “identity” kolommen genoemd, afhankelijk van het DBMS dat wordt gebruikt.
Gebruik in SQL Server de 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()
);
In dit geval gebruiken we IDENTITY(1,1)
.
- De eerste
1
is het zaad. Dit specificeert met welke waarde de telling moet beginnen (d.w.z. dit is de waarde van de allereerste rij die in de tabel is ingevoegd). - De tweede
1
is de verhoging. Dit is de incrementele waarde die wordt toegevoegd aan de identiteitswaarde van de vorige geladen rij.
Elk DBMS heeft zijn eigen sleutelwoord voor het maken van een automatisch oplopende kolom.
- Gebruik in MySQL en MariaDb
AUTO_INCREMENT
- In SQLite heb je een aantal opties (inclusief de
AUTOINCREMENT
zoekwoord) - Gebruik in PostgreSQL
SERIAL
- Van Oracle Database 12c , kunt u nu het IDENTITY-sleutelwoord gebruiken voor het maken van automatisch oplopende kolommen. Een voorbeeld kan er als volgt uitzien:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Geavanceerde opties
Bij de meeste DBMS'en kunt u geavanceerde opties opgeven bij het maken van tabellen. De beschikbare opties zijn grotendeels afhankelijk van uw DBMS.
Raadpleeg uw DBMS-documentatie als u opties nodig heeft die niet in dit artikel worden gespecificeerd.
Veel geavanceerde opties kunnen worden ingesteld via de GUI (afhankelijk van de tool die u gebruikt om verbinding te maken met uw database). U kunt altijd een tabel maken of wijzigen via de GUI en vervolgens de optie "Script as Create" (of iets dergelijks) gebruiken om de SQL-code te zien die u moet uitvoeren om zo'n tabel te maken. U kunt deze code gebruiken en de tabelnamen, kolomnamen, enz. wijzigen om een geheel nieuwe tabel te maken op basis van de definitie van de vorige.