CREATE TABLE legt in SQL eine neue Tabelle mit ihren Spalten, Datentypen und Regeln an. Es gehört zur DDL (Data Definition Language) und ist der erste Schritt jedes Datenbank-Schemas: Erst muss die Struktur stehen, dann können INSERT-Befehle Daten hineinschreiben.

Grundaufbau

Jede Spalte bekommt einen Namen, einen Datentyp und optional Regeln. Das Komma trennt die Spaltendefinitionen, der Strichpunkt beendet das Statement:

CREATE TABLE kunden (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE,
    geburtsdatum DATE,
    anmeldedatum TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Wer dieselbe Aufgabe in SQL Server, PostgreSQL oder Oracle lösen will, deklariert eine IDENTITY-Spalte statt einer AUTO_INCREMENT-Spalte.

Die wichtigsten Regeln (Constraints)

  • PRIMARY KEY: eindeutige Identifikation jeder Zeile, nie NULL – Details bei Primär- und Fremdschlüssel
  • NOT NULL: Pflichtfeld, kein leerer Wert erlaubt – siehe NOT NULL-Constraint
  • UNIQUE: kein Wert darf doppelt vorkommen – siehe UNIQUE-Constraint
  • DEFAULT: automatischer Wert, wenn die Spalte beim Einfügen fehlt
  • CHECK: Bedingung, die jeder Wert erfüllen muss – siehe CHECK-Constraint
  • FOREIGN KEY: Verweis auf eine Zeile einer anderen Tabelle

Datentypen wählen

Grobe Orientierung: INT für ganze Zahlen, DECIMAL(p,s) für Geldbeträge, VARCHAR(n) für kurze Texte, TEXT für lange Texte, DATE/TIMESTAMP für Zeitpunkte, BOOLEAN für Ja/Nein. Zu große Typen verschwenden Speicher, zu kleine brechen später – der Datenbankschema-Artikel erklärt das Zusammenspiel mit Indizes und Datenmodellen.

Variante: CREATE TABLE AS

Mit CREATE TABLE kopie AS SELECT ... entsteht eine neue Tabelle direkt aus einem Abfrageergebnis – praktisch für Staging-Tabellen oder Backups. Die Datentypen werden aus den Ergebnisspalten übernommen, Constraints wie PRIMARY KEY gehen dabei meist verloren.

Fallstricke

  • Doppelte Tabellennamen: CREATE TABLE kunden schlägt fehl, wenn die Tabelle existiert. CREATE TABLE IF NOT EXISTS kunden ... unterdrückt den Fehler.
  • Reihenfolge der Fremdschlüssel: Die Zieltabelle muss vorher existieren, sonst gibt es einen Fehler.
  • DDL ist nicht überall zurücksetzbar: In MySQL/MariaDB löst CREATE TABLE einen impliziten Commit aus und lässt sich nicht in einer Transaktion zurückrollen – in PostgreSQL schon.
  • Reservierte Wörter: Namen wie order oder user müssen je nach Datenbank in Backticks bzw. Anführungszeichen gesetzt werden.

Wer die Struktur später ändert, nutzt ALTER TABLE; wer sie komplett entfernt, DROP TABLE. Die drei Befehle bilden zusammen das Grundgerüst jeder Schema-Verwaltung – von der ersten Tabelle bis zur Migration.