Ein CHECK-Constraint ist eine Datenbankregel, die prüft, ob die Werte einer Zeile eine Bedingung erfüllen. Damit lassen sich ungültige Daten bereits an der Datenbank abfangen, bevor sie gespeichert werden — zum Beispiel Preise unter null oder ein Geburtsdatum in der Zukunft.
So funktioniert ein CHECK-Constraint
Das Constraint besteht aus einem booleschen Ausdruck. Jede neue oder geänderte Zeile muss diesen Ausdruck erfüllen, sonst schlägt das INSERT oder UPDATE mit einem Fehler fehl. Ein einfaches Beispiel:
CREATE TABLE artikel (
preis DECIMAL(10,2) CHECK (preis >= 0)
);
Hier kann kein Artikel mit negativem Preis angelegt werden. Mit einem Namen lässt sich das Constraint später gezielt ansprechen:
CREATE TABLE mitarbeiter (
alter_jahre INT,
CONSTRAINT check_alter CHECK (alter_jahre BETWEEN 0 AND 120)
);
Unterstützung in den Datenbanksystemen
- MySQL: CHECK-Constraints werden erst seit Version 8.0.16 wirklich durchgesetzt. In älteren Versionen akzeptierte MySQL die Syntax, ignorierte die Prüfung aber stillschweigend.
- MariaDB: unterstützt CHECK-Constraints seit Version 10.2.1.
- PostgreSQL und SQLite: unterstützen CHECK-Constraints vollständig.
In MySQL dürfen CHECK-Constraints keine Unterabfragen, keine Stored Functions und keine Verweise auf andere Tabellen enthalten. Auch AUTO_INCREMENT-Spalten und Fremdschlüssel-Spalten mit ON UPDATE oder ON DELETE sind ausgeschlossen. Komplexe Prüfungen über mehrere Tabellen löst man daher besser mit Triggern.
Abgrenzung zu anderen Constraints
Während ein CHECK-Constraint eine freie Bedingung formuliert, sichern UNIQUE und NOT NULL einzelne Eigenschaften ab: Eindeutigkeit beziehungsweise das Vorhandensein eines Wertes. Primär- und Fremdschlüssel steuern dagegen die Identität und die Beziehungen zwischen Tabellen. Alle Regeln zusammen bilden das Datenbankschema.
Grundlegendes zu Abfragen und Tabellen findest du in den SQL-Grundlagen.