Heim >Datenbank >MySQL-Tutorial >Warum funktionieren meine MySQL CHECK-Einschränkungen nicht?
Verstehen des CHECK-Einschränkungsverhaltens in MySQL
Die Handhabung von CHECK-Einschränkungen durch MySQL kann manchmal unerwartet sein. Eine CHECK-Einschränkung scheint inaktiv zu sein, selbst wenn sie korrekt definiert ist. Der Schlüssel liegt darin, die Kompatibilität der MySQL-Version zu verstehen.
MySQL 8.0.16 war die erste Version, die CHECK-Einschränkungen vollständig unterstützte. Wenn Ihre MySQL-Version älter als 8.0.16 ist, wird die CHECK
-Klausel analysiert, aber von allen Speicher-Engines ignoriert. Daten, die gegen die Einschränkung verstoßen, werden fehlerfrei eingefügt.
Konsultieren Sie das offizielle MySQL-Referenzhandbuch (https://www.php.cn/link/e6c19a87ef9e816e02ce247d4f41d38a), um die Fähigkeiten Ihrer MySQL-Version zu bestätigen.
Alternativen zu CHECK-Einschränkungen (für ältere MySQL-Versionen):
Wenn Ihre MySQL-Version keine CHECK-Einschränkungsunterstützung bietet, sollten Sie die Verwendung von Triggern in Betracht ziehen. Trigger führen benutzerdefinierten Code als Reaktion auf Datenbankereignisse wie das Einfügen von Zeilen aus. Ein Trigger kann Daten vor dem Einfügen validieren und so die Datenintegrität sicherstellen.
Ein Auslöser zum Erzwingen eines nicht negativen Werts für das SD
-Feld in einer Customer
-Tabelle könnte beispielsweise sein:
<code class="language-sql">DELIMITER // CREATE TRIGGER trig_sd_check BEFORE INSERT ON Customer FOR EACH ROW BEGIN IF NEW.SD < 0 THEN SET NEW.SD = 0; END IF; END // DELIMITER ;</code>
Dieser Trigger fängt INSERT
-Anweisungen in der Customer
-Tabelle ab. Wenn SD
negativ ist, wird es vom Trigger auf Null gesetzt. Dies bietet eine ähnliche Funktionalität wie eine CHECK
-Einschränkung.
Das obige ist der detaillierte Inhalt vonWarum funktionieren meine MySQL CHECK-Einschränkungen nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!