Сначала я создал таблицу вроде
CREATE TABLE Customer (
SD integer CHECK (SD > 0),
Last_Name varchar (30),
First_Name varchar(30)
);
а затем вставил значения в эту таблицу
INSERT INTO Customer values ('-2','abc','zz');
MySQL не показывает ошибки, он принял значения.
mysql
check-constraints
JohnRaja
источник
источник
Ответы:
MySQL 8.0.16 - первая версия, которая поддерживает ограничения CHECK.
Прочтите https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html
Если вы используете MySQL 8.0.15 или более раннюю версию, в Справочном руководстве MySQL говорится:
Попробуйте триггер ...
Надеюсь, это поможет.
источник
CHECK
ограничение. Ааа, это было бы слишком просто ...К сожалению, MySQL не поддерживает проверочные ограничения SQL. Вы можете определить их в своем DDL-запросе по соображениям совместимости, но они просто игнорируются.
Есть простая альтернатива
Вы можете создать
BEFORE INSERT
иBEFORE UPDATE
триггера , которые либо вызывают ошибку или установить поле значения по умолчанию , когда требование данных не выполняется.Пример
BEFORE INSERT
работы после MySQL 5.5До MySQL 5.5 вы должны были вызвать ошибку, например вызвать неопределенную процедуру.
В обоих случаях это вызывает неявный откат транзакции. MySQL не разрешает использование самого оператора ROLLBACK в процедурах и триггерах.
Если вы не хотите откатывать транзакцию (INSERT / UPDATE должен пройти даже при неудачном "ограничении проверки", вы можете перезаписать значение, используя
SET NEW.ID = NULL
которое установит идентификатор в значение по умолчанию для полей, на самом деле не имеет смысла для идентификатора ТхоИзменить: удалена случайная цитата.
По поводу
:=
оператора:https://dev.mysql.com/doc/refman/5.6/en/assignment-operators.html
Относительно кавычек идентификаторов обратных ссылок:
http://dev.mysql.com/doc/refman/5.6/en/identifiers.html
источник
DELIMITER
?CHECK
MySQL игнорирует ограничения, как объясняется в небольшом комментарии в документации:CREATE TABLE
источник
CHECK
ограничений, еслиCHECK
оценивается как,FALSE
то вставка (или обновление) не выполняется и возникает ошибка.CHECK
Ограничение не кажется , должны быть реализованы в MySQL.См. Этот отчет об ошибке: https://bugs.mysql.com/bug.php?id=3464
источник
Как упоминал Джоанк, MariaDB теперь, похоже, поддерживает ограничения CHECK среди других преимуществ:
«Поддержка CHECK CONSTRAINT ( MDEV-7563 )».
https://mariadb.com/kb/en/mariadb/mariadb-1021-release-notes/
источник
Проверочные ограничения поддерживаются начиная с версии 8.0.15 (еще не выпущенной)
https://bugs.mysql.com/bug.php?id=3464
источник
Обновите MySQL до версии 8.0.16, чтобы использовать
checks
:Документация по проверкам MySQL
источник
попробуйте с
set sql_mode = 'STRICT_TRANS_TABLES'
ИЛИSET sql_mode='STRICT_ALL_TABLES'
источник
CHECK