Dieser Artikel enthält grundlegendes SQL CREATE TABLE
Anweisungen, mit denen Anfänger einfache Tabellen für ihre Datenbankprojekte erstellen können.
Grundlegende Syntax
Die grundlegende Syntax zum Erstellen von Tabellen in SQL lautet wie folgt:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Wo:
TableName
ist der Name, den Sie der Tabelle geben möchtenColumn1
, usw. sind die Namen, die Sie Ihren Spalten gebendatatype
ist der Datentyp, den Sie jeder Spalte zuweisen. Die meisten RDBMS erfordern, dass Sie jeder Spalte einen Datentyp zuweisen. In SQLite ist es optional.optional_constraints
ist eine optionale Liste von Einschränkungen, die Sie auf eine Spalte anwenden.
Beachten Sie, dass die meisten DBMSs eine komplexere Syntax als diese verwenden (d. h. sie bieten mehr Optionen), aber dies ist im Allgemeinen die grundlegende Syntax, die zum Erstellen einer Tabelle erforderlich ist. Die meisten Anfänger beginnen mit dieser Syntax und lernen dann im Laufe der Zeit fortgeschrittenere Optionen kennen.
Einfaches Beispiel
Hier ist ein einfaches Beispiel:
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 sind einige Punkte zu beachten:
- Tabellen- und Spaltennamen können in jedem Fall sein. Zum Beispiel statt
PetId
Ich hätte espetid
nennen können ,PETID
, oderpet_id
. Einige DBMS (z. B. Postgres) unterscheiden zwischen Groß- und Kleinschreibung, wenn Sie Tabellen und ihre Spaltennamen abfragen, während andere dies nicht tun (z. B. SQL Server). - Einige DBMS verwenden unterschiedliche Namen für ihre Datentypen.
NOT NULL
ist eine Tabelleneinschränkung, die angibt, dass diese Spalte einen Wert enthalten muss (d. h. sie darf nichtNULL
enthalten Werte).NULL
bedeutet, dass die SpalteNULL
enthalten darf Werte. Einige DBMS (z. B. DB2) unterstützen denNULL
nicht Schlüsselwort, daher müssen Sie es weglassen, wenn Sie mit solchen DBMSs arbeiten.PRIMARY KEY
fügt der Tabelle eine Primärschlüsseleinschränkung hinzu. Es empfiehlt sich, einen Primärschlüssel für alle Ihre Tabellen anzugeben.- Wenn eine Tabelle mit demselben Namen bereits in der Datenbank vorhanden ist, erhalten Sie eine Fehlermeldung. Sie müssen die vorhandene Tabelle löschen oder ändern (oder den Namen der Tabelle ändern, die Sie erstellen).
Erstellen Sie eine Tabelle mit Fremdschlüsseln
Das folgende Beispiel erstellt eine Tabelle mit zwei Fremdschlüsseln. Fremdschlüssel werden verwendet, um eine Beziehung zwischen zwei Tabellen herzustellen.
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
);
Die REFERENCES
-Klausel wird verwendet, um einen Fremdschlüssel für zwei Spalten zu definieren. In unserem Fall erzwingen die Fremdschlüssel Folgendes:
- Die
Pets.PetTypeId
Spalte verweist aufPetTypes.PetTypeId
Spalte (jeder Wert, der in diePets.PetTypeId
Spalte muss einen übereinstimmenden Wert inPetTypes.PetTypeId
haben Spalte). - Die
Pets.OwnerId
Spalte verweist auf dieOwners.OwnerId
Spalte (jeder Wert, der in diePets.OwnerId
geht Spalte muss einen übereinstimmenden Wert inOwners.OwnerId
haben Spalte).
Fremdschlüssel können auch nachträglich mit ALTER TABLE
hinzugefügt werden Anweisung, falls erforderlich.
Erstellen Sie eine Tabelle mit DEFAULT-Einschränkung
Das folgende Beispiel erstellt eine Tabelle mit einem DEFAULT
Einschränkung.
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
);
Erstellen Sie eine Tabelle mit einer Zeitstempelspalte
Sie können DEFAULT
verwenden Einschränkungen zum automatischen Einfügen des aktuellen Datums und der Uhrzeit in eine Spalte, wenn eine neue Zeile eingefügt wird. Dies wird oft als Einfügen eines Zeitstempels bezeichnet.
Unterschiedliche DBMS verwenden unterschiedliche Funktionen, um das aktuelle Datum zurückzugeben.
Hier ist ein Beispiel für die Ausführung in 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
);
In SQL Server CURRENT_TIMESTAMP
ist das ANSI-Äquivalent von GETDATE()
Funktion.
Alternativ können Sie SYSDATETIME()
verwenden für einen genaueren Zeitstempel:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Um die höhere Genauigkeit zu unterstützen, muss der Datentyp der Spalte datetime2 sein .
SQL Server hat einige Datentypen für Datums-/Uhrzeitwerte. Eine Liste finden Sie unter Datums- und Zeitfunktionen von SQL Server.
Jedes DBMS hat seine eigenen Funktionen zur Rückgabe von Datum und Uhrzeit. Hier ist eine Liste der wichtigsten:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE oder NOW() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL-Server | CURRENT_TIMESTAMP , GETDATE() oder SYSDATETIME() |
SQLite | datetime('now') |
Siehe auch:
- Datums- und Zeitfunktionen von SQL Server
- SQLite-Datums- und Zeitfunktionen
Erstellen Sie eine Spalte mit einem automatisch inkrementierenden Wert
Manchmal müssen Sie eine Spalte erstellen, die automatisch einen Wert erhöht, wenn eine neue Zeile eingefügt wird. Diese werden je nach verwendetem DBMS typischerweise als „Auto-Increment“- oder „Identity“-Spalten bezeichnet.
Verwenden Sie in SQL Server die 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 diesem Fall verwenden wir IDENTITY(1,1)
.
- Die erste
1
ist der Samen. Dies gibt an, mit welchem Wert die Zählung beginnen soll (d. h. dies ist der Wert der allerersten Zeile, die in die Tabelle eingefügt wird). - Die zweite
1
ist das Inkrement. Dies ist der inkrementelle Wert, der zum Identitätswert der vorherigen geladenen Zeile hinzugefügt wird.
Jedes DBMS hat sein eigenes Schlüsselwort zum Erstellen einer automatisch inkrementierenden Spalte.
- Verwenden Sie in MySQL und MariaDb
AUTO_INCREMENT
- In SQLite haben Sie einige Optionen (einschließlich
AUTOINCREMENT
Schlüsselwort) - Verwenden Sie in PostgreSQL
SERIAL
- Von Oracle Database 12c , können Sie jetzt das Schlüsselwort IDENTITY zum Erstellen von automatisch inkrementierenden Spalten verwenden. Ein Beispiel könnte so aussehen:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Erweiterte Optionen
Bei den meisten DBMSs können Sie beim Erstellen von Tabellen erweiterte Optionen angeben. Die verfügbaren Optionen hängen weitgehend von Ihrem DBMS ab.
Sehen Sie in Ihrer DBMS-Dokumentation nach, wenn Sie Optionen benötigen, die nicht in diesem Artikel aufgeführt sind.
Viele erweiterte Optionen können über die GUI eingestellt werden (abhängig von dem Tool, das Sie verwenden, um sich mit Ihrer Datenbank zu verbinden). Sie können eine Tabelle jederzeit über die GUI erstellen oder ändern und dann die Option „Script as Create“ (oder ähnlich) verwenden, um den SQL-Code anzuzeigen, den Sie ausführen müssten, um eine solche Tabelle zu erstellen. Sie können diesen Code nehmen und die Tabellennamen, Spaltennamen usw. ändern, um eine ganz neue Tabelle basierend auf der Definition der vorherigen zu erstellen.