CHECK
Constraints & Struktur
Der CHECK-Constraint legt eine Bedingung fest, die jeder Wert in einer Spalte erfüllen muss. Verstößt ein Wert dagegen, lehnt die Datenbank das Einfügen oder Ändern ab. So verhinderst du z. B. negative Preise.
Syntax beim Anlegen
CREATE TABLE Produkte ( ProduktID INT PRIMARY KEY, Produktname VARCHAR(100) NOT NULL, Preis DECIMAL(8,2) CHECK (Preis >= 0) );
Damit kann kein Produkt mit negativem Preis gespeichert werden.
Was passiert bei Verstoß?
INSERT INTO Produkte VALUES (1, 'Kaffee', -3.50); -- Fehler: CHECK-Bedingung (Preis >= 0) verletzt
Benannter CHECK und mehrere Bedingungen
Mit einem Namen wird die Fehlermeldung klarer, und du kannst Bedingungen kombinieren:
CREATE TABLE Bestellungen ( BestellID INT PRIMARY KEY, KundenID INT, Menge INT, CONSTRAINT chk_menge CHECK (Menge > 0 AND Menge <= 1000) );
CHECK nachträglich hinzufügen
ALTER TABLE Kunden ADD CONSTRAINT chk_umsatz CHECK (Umsatz >= 0);
Beispiele für Bedingungen
CHECK (Land IN ('DE','AT','CH'))– nur erlaubte LändercodesCHECK (Preis > 0)– Preis muss positiv seinCHECK (LENGTH(Name) >= 2)– Name mindestens 2 Zeichen
Stolperfalle
Wichtig für MySQL: Erst ab Version 8.0.16 wird CHECK tatsächlich durchgesetzt. Ältere MySQL-Versionen parsen die Bedingung zwar, ignorieren sie aber stillschweigend – ein gefährlicher Trugschluss. PostgreSQL und SQL Server setzen CHECK dagegen seit jeher zuverlässig um. Beachte zudem: Eine Bedingung, die NULL ergibt, gilt als erfüllt.