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.