К сожалению, 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/en/assignment-operators.html
Относительно кавычек идентификаторов обратных ссылок:
Символ кавычки идентификатора - это обратная кавычка («»).
Если включен режим ANSI_QUOTES SQL, также допустимо заключать идентификаторы в двойные кавычки.
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html