MySQL: проверьте ограничение с помощью Date - PullRequest
4 голосов
/ 13 февраля 2012

Я использую MySQL, и вот простой набор запросов:

create table dcheck (
    fdate date,
    sdate date,
    check (fdate <= sdate)
);

insert into dcheck values ('2006-12-12','2003-12-12');
insert into dcheck values ('2003-12-12', '2006-12-12');

Здесь я ожидаю, что первый оператор вставки потерпит неудачу. Но, что удивительно, в таблице есть и запросы, и две строки.

Может кто-нибудь объяснить, почему?

Спасибо

Ответы [ 3 ]

10 голосов
/ 13 февраля 2012

MySQL не поддерживает ограничения CHECK.Из последнего (5.6) подробного руководства :

Предложение CHECK анализируется, но игнорируется всеми механизмами хранения.

Так что синтаксисанализируется на совместимость с другими SQL-запросами, но проверка не выполняется.

Вы можете подделать ограничение CHECK с помощью триггеров BEFORE INSERT и BEFORE UPDATE, которые вызывали исключение , если требуемое условие не было выполнено.

2 голосов
/ 13 февраля 2012
The CHECK clause is parsed but ignored by all storage engines.

http://dev.mysql.com/doc/refman/5.1/en/create-table.html

1 голос
/ 29 апреля 2019

Ограничения CHECK теперь поддерживаются начиная с MySQL 8.0.16

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...