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:
TableNameist der Name, den Sie der Tabelle geben möchtenColumn1, usw. sind die Namen, die Sie Ihren Spalten gebendatatypeist der Datentyp, den Sie jeder Spalte zuweisen. Die meisten RDBMS erfordern, dass Sie jeder Spalte einen Datentyp zuweisen. In SQLite ist es optional.optional_constraintsist 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
PetIdIch hätte espetidnennen 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 NULList eine Tabelleneinschränkung, die angibt, dass diese Spalte einen Wert enthalten muss (d. h. sie darf nichtNULLenthalten Werte).NULLbedeutet, dass die SpalteNULLenthalten darf Werte. Einige DBMS (z. B. DB2) unterstützen denNULLnicht Schlüsselwort, daher müssen Sie es weglassen, wenn Sie mit solchen DBMSs arbeiten.PRIMARY KEYfü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.PetTypeIdSpalte verweist aufPetTypes.PetTypeIdSpalte (jeder Wert, der in diePets.PetTypeIdSpalte muss einen übereinstimmenden Wert inPetTypes.PetTypeIdhaben Spalte). - Die
Pets.OwnerIdSpalte verweist auf dieOwners.OwnerIdSpalte (jeder Wert, der in diePets.OwnerIdgeht Spalte muss einen übereinstimmenden Wert inOwners.OwnerIdhaben 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
1ist 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
1ist 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
AUTOINCREMENTSchlü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.