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:
TableNameis de naam die u aan de tafel wilt gevenColumn1, etc zijn de namen die u aan uw kolommen geeftdatatypeis 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_constraintsis 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
PetIdIk had hetpetidkunnen 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 NULLis een tabelbeperking die aangeeft dat deze kolom een waarde moet bevatten (d.w.z. deze mag geenNULLbevatten waarden).NULLbetekent 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 KEYvoegt 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.PetTypeIdkolom verwijst naar dePetTypes.PetTypeIdkolom (elke waarde die in dePets.PetTypeIdkolom moet een overeenkomende waarde hebben in dePetTypes.PetTypeIdkolom). - De
Pets.OwnerIdkolom verwijst naar deOwners.OwnerIdkolom (elke waarde die in dePets.OwnerIdkolom moet een overeenkomende waarde hebben in deOwners.OwnerIdkolom).
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
1is 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
1is 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
AUTOINCREMENTzoekwoord) - 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.