Direkt zum Hauptinhalt springen
eLearner.app
Modul 8 · Lektion 3 von 431/57 im Kurs~12 min
Lektionen des Moduls (3/4)

Erstellen von Tabellen und Constraints: DDL

Bisher haben Sie an Tabellen gearbeitet, die bereits existieren (customers, orders…). DDL („Data Definition Language“) bezieht sich auf die Aussagen, die Erstellen und Ändern des Schemas selbst: Tabellen, Spalten, Einschränkungen, Indizes.

CREATE TABLE: die Syntax

SQL
CREATE TABLE nome_tabella (
  colonna  TIPO  [vincoli_colonna],
  …,
  [vincoli_tabella]
);

Beispiel: eine Wunschliste, die Kunden und Produkte verknüpft:

SQL
CREATE TABLE wishlists (
  id           SERIAL PRIMARY KEY,
  customer_id  INTEGER NOT NULL REFERENCES customers(id),
  product_id   INTEGER NOT NULL REFERENCES products(id),
  added_on     DATE NOT NULL DEFAULT CURRENT_DATE,
  note         TEXT,
  UNIQUE (customer_id, product_id)
);

Lassen Sie es uns Stück für Stück aufschlüsseln.

Die häufigsten Typen

Geben Sieein Was es enthält
INTEGER / INTGanze Zahlen (-2,1B … +2,1B)
BIGINTGroße ganze Zahlen
NUMERIC(p, s)Exakte Dezimalzahlen – Geld, Prozentsätze
TEXTZeichenfolgen variabler Länge
VARCHAR(n)Zeichenfolgen mit einer maximalen Länge von n
BOOLEANTRUE / FALSE / INT0
INT1Nur Datum
INT2Datum + Uhrzeit (keine Zeitzone)
INT3Datum + Uhrzeit mit Zeitzone
INT4INT5 mit automatisch inkrementierender Sequenz

Einschränkungen

Eine Einschränkung ist eine Regel, die PostgreSQL automatisch durchsetzt: wenn eine INSERT/UPDATE verstößt dagegen, der Vorgang schlägt fehl.

SQL
PRIMARY KEY                         -- identifica univocamente la riga, non NULL
NOT NULL                            -- vieta NULL
UNIQUE                              -- vieta duplicati su questa colonna
REFERENCES tabella(colonna)         -- foreign key
CHECK (espressione_booleana)        -- es. CHECK (price > 0)
DEFAULT espressione                 -- valore di default se non fornito

Einschränkungen können inline auf einer Spalte oder auf Tabellenebene deklariert werden Einschränkungen (unterhalb der Felder). Beispiel für einen zusammengesetzten UNIQUE:

SQL
UNIQUE (customer_id, product_id)   -- niente coppia (cliente, prodotto) duplicata

CHECK-Einschränkung

CHECK erzwingt eine benutzerdefinierte Regel:

SQL
CREATE TABLE stock_alerts (
  product_id   INTEGER PRIMARY KEY REFERENCES products(id),
  threshold    INTEGER NOT NULL CHECK (threshold >= 0),
  notify_email TEXT    NOT NULL,
  active       BOOLEAN NOT NULL DEFAULT true
);

threshold muss ≥ 0 sein; Wenn jemand INSERT … threshold = -5 ausprobiert, ist es schlägt mit einem Einschränkungsfehler fehl.

Löschen und Ändern

SQL
DROP TABLE wishlists;                                 -- elimina la tabella (e i dati!)
DROP TABLE IF EXISTS wishlists;                       -- senza errore se non esiste
ALTER TABLE customers ADD COLUMN newsletter BOOLEAN NOT NULL DEFAULT false;
ALTER TABLE customers DROP COLUMN newsletter;

Du bist dran

Übung#sql.m8.l3.e1
Versuche: 0Wird geladen…

Erstellen Sie eine Wunschlistentabelle mit den folgenden Spalten: id (SERIELLER PRIMÄRSCHLÜSSEL), customer_id (INTEGER NOT NULL REFERENCES customer(id)), product_id (INTEGER NOT NULL REFERENCES products(id)), Added_on (DATE NOT NULL with DEFAULT CURRENT_DATE). Fügen Sie eine UNIQUE-Einschränkung für das Paar hinzu (customer_id, product_id).

Editor wird geladen…
Hinweis anzeigen

UNIQUE (customer_id, product_id) als Einschränkung auf Tabellenebene unten.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#sql.m8.l3.e2
Versuche: 0Wird geladen…

Fügen Sie der Kundentabelle eine Newsletter-Spalte vom Typ BOOLEAN, NOT NULL, mit DEFAULT false hinzu. Verwenden Sie eine einzelne ALTER TABLE-Anweisung.

Editor wird geladen…
Hinweis anzeigen

Ohne DEFAULT würde ALTER fehlschlagen, da bereits Zeilen vorhanden sind und die neue Spalte NICHT NULL ist.

Lösung nach 3 Versuchen verfügbar