Niestety MySQL nie obsługuje ograniczeń sprawdzania SQL. Można je zdefiniować w zapytaniu DDL ze względu na zgodność, ale są one po prostu ignorowane.
Jest prosta alternatywa
Można tworzyć BEFORE INSERTi BEFORE UPDATEwyzwalacze, które powodują błąd lub ustawiają wartość domyślną pola, gdy wymagania danych nie są spełnione.
Przykład BEFORE INSERTpracy po 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 ;
Przed MySQL 5.5 trzeba było spowodować błąd, np. Wywołać niezdefiniowaną procedurę.
W obu przypadkach powoduje to niejawne wycofanie transakcji. MySQL nie zezwala na samą instrukcję ROLLBACK w procedurach i wyzwalaczach.
Jeśli nie chcesz wycofywać transakcji (INSERT / UPDATE powinno przejść nawet przy nieudanym "ograniczeniu sprawdzającym" możesz nadpisać wartość używając SET NEW.ID = NULLktóra ustawi id na wartość domyślną pola, nie ma to sensu dla id Chociaż
Edycja:
Usunięto zbłąkany cytat.
W odniesieniu do :=operatora:
W przeciwieństwie do =tego :=operator nigdy nie jest interpretowany jako operator porównania. Oznacza to, że możesz użyć :=w dowolnej prawidłowej instrukcji SQL (nie tylko w instrukcjach SET), aby przypisać wartość do zmiennej.
https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
Odnośnie cudzysłowów identyfikatora odwrotnego znaku:
Znakiem cudzysłowu identyfikatora jest lewy przycisk („„ ”)
Jeśli tryb ANSI_QUOTES SQL jest włączony, dozwolone jest również cytowanie identyfikatorów w podwójnych cudzysłowach
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html