Heim >Datenbank >MySQL-Tutorial >Wie funktionieren MySQL CHECK-Einschränkungen und wie kann ich die Datenvalidierung in älteren und neueren Versionen sicherstellen?
CHECK-Einschränkungen in MySQL
Wenn Sie versuchen, einer MySQL-Tabelle eine CHECK-Einschränkung hinzuzufügen, kann es beim Einfügen von Daten, die gegen die Einschränkung verstoßen, zu unerwartetem Verhalten kommen. Dieser Artikel befasst sich mit den Feinheiten von CHECK-Einschränkungen in MySQL und bietet eine Lösung zur Durchsetzung der Validierung.
In früheren Versionen von MySQL (bis 8.0.15) wurden CHECK-Einschränkungen definiert, aber nicht erzwungen. Wie im MySQL-Referenzhandbuch angegeben: „Die CHECK-Klausel wird von allen Speicher-Engines analysiert, aber ignoriert.“
Lösungen für MySQL 8.0.15 und früher
Um die Datenvalidierung zu erzwingen, wenn keine native CHECK-Einschränkungsunterstützung vorhanden ist, können Sie einen Auslöser erstellen:
<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 jede INSERT-Anweisung ab und wenn der Wert der SD-Spalte kleiner als 0 ist, wird er auf 0 geändert, um sicherzustellen, dass die Einschränkung beibehalten wird.
PRÜFEN Sie die Einschränkungen für MySQL 8.0.16 und höher
MySQL 8.0.16 führt vollständige Unterstützung für CHECK-Einschränkungen ein. Um CHECK-Einschränkungen in 8.0.16 oder höher zu definieren, verwenden Sie die folgende Syntax:
<code class="language-sql">CREATE TABLE Customer ( SD integer CHECK (SD > 0), Last_Name varchar (30), First_Name varchar(30) );</code>MySQL erzwingt jetzt Einschränkungen und verhindert das Einfügen von Daten, die gegen die Einschränkungen verstoßen.
Das obige ist der detaillierte Inhalt vonWie funktionieren MySQL CHECK-Einschränkungen und wie kann ich die Datenvalidierung in älteren und neueren Versionen sicherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!