Leider unterstützt MySQL keine SQL-Überprüfungsbeschränkungen. Sie können sie aus Kompatibilitätsgründen in Ihrer DDL-Abfrage definieren, sie werden jedoch einfach ignoriert.
Es gibt eine einfache Alternative
Sie können erstellen BEFORE INSERT
undBEFORE UPDATE
auslösen, die entweder einen Fehler verursachen oder das Feld auf den Standardwert setzen, wenn die Anforderungen der Daten nicht erfüllt sind.
Beispiel für die BEFORE INSERT
Arbeit nach MySQL 5.5
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Test`
FOR EACH ROW
BEGIN
IF CHAR_LENGTH( NEW.ID ) < 4 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT := 'check constraint on Test.ID failed';
END IF;
END$$
DELIMITER ;
Vor MySQL 5.5 mussten Sie einen Fehler verursachen, z. B. eine undefinierte Prozedur aufrufen.
In beiden Fällen führt dies zu einem impliziten Transaktions-Rollback. MySQL erlaubt die ROLLBACK-Anweisung selbst nicht innerhalb von Prozeduren und Triggern.
Wenn Sie die Transaktion nicht zurücksetzen möchten (INSERT / UPDATE sollte auch bei einer fehlgeschlagenen "Prüfbedingung" erfolgreich sein, können Sie den Wert überschreiben, mit SET NEW.ID = NULL
dem die ID auf den Standardwert des Felds gesetzt wird. Dies ist für eine ID nicht wirklich sinnvoll tho
Bearbeiten:
Das streunende Zitat wurde entfernt.
In Bezug auf den :=
Betreiber:
Im Gegensatz dazu =
wird der :=
Operator niemals als Vergleichsoperator interpretiert. Dies bedeutet, dass Sie :=
in jeder gültigen SQL-Anweisung (nicht nur in SET-Anweisungen) einer Variablen einen Wert zuweisen können.
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
In Bezug auf Backtick-ID-Anführungszeichen:
Das Bezeichner-Anführungszeichen ist das Backtick ("` ")
Wenn der SQL-Modus ANSI_QUOTES aktiviert ist, können Bezeichner auch in doppelte Anführungszeichen gesetzt werden
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html