Dies ist eine alte Version des Dokuments!


LU05c - Constraints (Einschränkungen)

  • Ich kann erklären, was Constraints sind und wozu sie dienen.
  • Ich kann PRIMARY KEY, AUTO_INCREMENT, NOT NULL und UNIQUE beim Erstellen einer Tabelle setzen.
  • Ich kann begründen, welcher Constraint für welche Spalte sinnvoll ist.

Am Ende der letzten Seite stand ein Problem: Unsere Tabelle buch erlaubt zwei Bücher mit derselben buch_id und ein Buch ganz ohne Titel. Die Datenbank prüft so unsere Eigaben nicht.

Constraints sind Regeln für Spalten. Sie sorgen dafür, dass fehlerhafte Daten gar nicht erst gespeichert werden können. Die Datenbank weist einen Eintrag ab, der gegen eine Regel verstösst.

Der Primärschlüssel identifiziert jeden Datensatz eindeutig. Jede Tabelle kann genau einen Primärschlüssel haben.

CREATE TABLE buch (
  buch_id INT PRIMARY KEY,
  titel VARCHAR(100)
);

Wirkung: Keine zwei Bücher dürfen dieselbe buch_id haben. Ausserdem darf die buch_id nie leer (NULL) sein – ein Primärschlüssel schliesst NOT NULL automatisch mit ein.

Das ist genau der PK, den Sie in LU04 in Ihrem Crow's-Foot-Diagramm markiert haben. Hier wird er zum ersten Mal wirklich gesetzt.

Bisher müssten wir jede buch_id selbst vergeben – und dabei aufpassen, keine Nummer doppelt zu verwenden. Das übernimmt AUTO_INCREMENT: MySQL vergibt bei jedem neuen Datensatz automatisch die nächste freie Nummer.

CREATE TABLE buch (
  buch_id INT AUTO_INCREMENT PRIMARY KEY,
  titel VARCHAR(100)
);

Wirkung: Das erste Buch bekommt die 1, das zweite die 2, und so weiter. Sie müssen die buch_id beim Einfügen gar nicht mehr angeben.

AUTO_INCREMENT wird fast immer zusammen mit dem Primärschlüssel verwendet.

NOT NULL legt fest, dass eine Spalte nicht leer bleiben darf – ein Pflichtfeld.

CREATE TABLE buch (
  buch_id INT AUTO_INCREMENT PRIMARY KEY,
  titel VARCHAR(100) NOT NULL,
  seiten INT
);

Wirkung: Ein Buch ohne Titel wird abgewiesen. Ein Buch ohne Seitenzahl ist dagegen erlaubt, weil bei seiten kein NOT NULL steht.

Fragen Sie sich bei jeder Spalte: Ergibt ein Datensatz ohne diesen Wert überhaupt Sinn? Wenn nein, gehört NOT NULL dorthin.

UNIQUE verhindert, dass ein Wert in einer Spalte doppelt vorkommt.

CREATE TABLE buch (
  buch_id INT AUTO_INCREMENT PRIMARY KEY,
  titel VARCHAR(100) NOT NULL,
  isbn CHAR(13) UNIQUE
);

Wirkung: Dieselbe ISBN kann nur einmal eingetragen werden.

PRIMARY KEY UNIQUE
Wie oft pro Tabelle? genau einmal beliebig oft
Darf leer sein? nein ja
Zweck identifiziert den Datensatz verhindert Doppeleinträge

Eine ISBN wäre theoretisch auch als Primärschlüssel geeignet. In der Praxis nimmt man trotzdem meist eine eigene ID-Spalte: Sie ist kürzer, ändert sich nie und existiert auch dann, wenn ein Buch ausnahmsweise keine ISBN hat.

CREATE TABLE buch (
  buch_id INT AUTO_INCREMENT PRIMARY KEY,
  titel VARCHAR(100) NOT NULL,
  isbn CHAR(13) UNIQUE,
  seiten INT,
  preis DECIMAL(6,2),
  erschienen DATE,
  ausgeliehen BOOLEAN NOT NULL
);

Vergleichen Sie das mit der Fassung von der letzten Seite: Dieselbe Tabelle, aber die Datenbank passt jetzt auf.

Constraint Bedeutung
PRIMARY KEY Eindeutige Identifikation, nie leer, einmal pro Tabelle
AUTO_INCREMENT Automatisch fortlaufende Nummer
NOT NULL Spalte darf nicht leer bleiben
UNIQUE Wert darf in dieser Spalte nur einmal vorkommen

Es gibt einen weiteren wichtigen Constraint: den FOREIGN KEY, mit dem zwei Tabellen verknüpft werden. Sie haben ihn in LU04 bereits in Ihre Diagramme eingezeichnet. In SQL setzen wir ihn erst später im Modul – bis dahin bleiben unsere Tabellen einzeln.


Guido Koch

  • de/modul/m290_guko/learningunits/lu05/theorie/c_constraints.1789332242.txt.gz
  • Zuletzt geändert: 2026/09/13 22:44
  • von gkoch