На жаль, MySQL не підтримує обмеження перевірки SQL. Ви можете визначити їх у своєму запиті DDL з міркувань сумісності, але вони просто ігноруються.
Існує проста альтернатива
Ви можете створювати BEFORE INSERT
та BEFORE UPDATE
тригери, які або спричиняють помилку, або встановлюють для поля значення за замовчуванням, коли вимоги даних не виконані.
Приклад BEFORE INSERT
роботи після 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 ;
Перед MySQL 5.5 вам довелося викликати помилку, наприклад, викликати не визначену процедуру.
В обох випадках це спричиняє неявний відкат транзакцій. MySQL не дозволяє сам оператор ROLLBACK в рамках процедур і тригерів.
Якщо ви не хочете відмовляти транзакцію (INSERT / UPDATE має пройти навіть при невдалому "обмеженні перевірки", ви можете перезаписати значення, використовуючи SET NEW.ID = NULL
яке встановить ідентифікатор у значення поля за замовчуванням, насправді не має сенсу для ідентифікатора тхо
Редагувати:
Вилучена цитата.
Щодо :=
оператора:
На відміну від цього =
, :=
оператор ніколи не трактується як оператор порівняння. Це означає, що ви можете використовувати :=
в будь-якому дійсному операторі SQL (не тільки в операторах SET), щоб призначити значення змінній.
https://dev.mysql.com/doc/refman/5.6/uk/assignment-operators.html
Що стосується котирування ідентифікатора backtick:
Символом котирування ідентифікатора є зворотний вибір ("` ")
Якщо ввімкнено режим SSI ANSI_QUOTES, також можна допустити котирування ідентифікаторів у подвійних лапках
http://dev.mysql.com/doc/refman/5.6/uk/identifiers.html