Kodokon kodokon.com

Ein Schema erstellen: CREATE TABLE und Constraints

Entwirf deine eigenen Tabellen mit passenden Typen und den Constraints NOT NULL, UNIQUE und PRIMARY KEY, die deine Daten schützen.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Bisher hast du fertige Tabellen abgefragt; ein professioneller Entwickler entwirft sie. Ein gutes Schema weist ungültige Daten schon beim Einfügen zurück: Es ist deine erste Verteidigungslinie, noch vor jedem Anwendungscode. Erstelle in sqliteonline.com oder sqlite3 diese Tabelle:

SQL
CREATE TABLE users (
  id INTEGER PRIMARY KEY,
  email TEXT NOT NULL UNIQUE,
  username TEXT NOT NULL UNIQUE,
  created_at TEXT NOT NULL
    DEFAULT (datetime('now'))
);
Drei Constraints: NOT NULL, UNIQUE und ein Standardwert.

SQLite kennt nur fünf Speichertypen: INTEGER, REAL, TEXT, BLOB und NULL. Datumsangaben werden dort als TEXT im ISO-Format (2026-07-04) gespeichert. Anderswo (PostgreSQL, MySQL) würdest du stattdessen VARCHAR(255), TIMESTAMP oder BOOLEAN deklarieren: Das Prinzip bleibt gleich, nur die Typnamen ändern sich. Teste jetzt deine Constraints:

SQL
INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice');

INSERT INTO users (email, username)
VALUES ('alice@example.com', 'alice2');
Das zweite Einfügen schlägt fehl: UNIQUE constraint failed.

Der Primärschlüssel identifiziert jede Zeile: nie NULL, nie doppelt, nur einer pro Tabelle. In SQLite hat INTEGER PRIMARY KEY eine wertvolle Eigenschaft: Die Spalte zählt automatisch hoch, wenn du ihren Wert weglässt, wie in den Einfügungen oben. In PostgreSQL würdest du GENERATED ALWAYS AS IDENTITY schreiben, in MySQL AUTO_INCREMENT. Füge schließlich mit CHECK eine Geschäftsregel hinzu:

SQL
CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  sku TEXT NOT NULL UNIQUE,
  price REAL NOT NULL CHECK (price >= 0)
);

INSERT INTO products (name, sku, price)
VALUES ('Keyboard', 'KB-01', -5);
Abgewiesen: CHECK constraint failed. Kein negativer Preis kommt durch.

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Welcher Constraint garantiert, dass in der Spalte email kein Duplikat erscheint?
    • NOT NULL
    • UNIQUE
    • CHECK
    • DEFAULT
  2. Was ist der Unterschied zwischen PRIMARY KEY und UNIQUE?
    • Keiner, sie sind Synonyme
    • Der Primärschlüssel identifiziert die Zeile: nur einer pro Tabelle, nie NULL
    • UNIQUE ist strenger als PRIMARY KEY
  3. Was passiert in SQLite, wenn du eine Zeile ohne Wert für eine INTEGER-PRIMARY-KEY-Spalte einfügst?
    • Ein NOT-NULL-Fehler wird ausgelöst
    • SQLite erzeugt automatisch eine eindeutige Ganzzahl
    • Die Spalte bleibt NULL