我创建了带有检查约束的表计划:
mysql> create table schedule(order_date date, dely_date date check(dely_date>order_date)); Query OK, 0 rows affected (0.50 sec)
当我插入违反检查约束的值时,sql报告没有错误。
mysql> insert into schedule values('2015-11-20','2014-12-25'); Query OK, 1 row affected (0.10 sec) mysql> select * from schedule; +------------+------------+ | order_date | dely_date | +------------+------------+ | 2015-11-20 | 2014-12-25 | +------------+------------+ 1 row in set (0.00 sec)
我插入了一个在order_date之前的dely_date。
与中的CHECK约束一样MySQL被忽略Jakub Kania'sanswer
CHECK
MySQL
Jakub Kania'sanswer
工作的实施例CHECK使用SQL Server:
SQL Server
create table #schedule(order_date date, dely_date date, check(dely_date>order_date)); insert into #schedule values('2015-11-20','2014-12-25'); -- The INSERT statement conflicted with the CHECK constraint "CK_#schedule_A59B8DED". -- The conflict occurred in database "tempdb", table "dbo.#schedule___ -- __________________00000000C9D8". The statement has been terminated. INSERT INTO #schedule values('2015-12-24','2015-12-25'); SELECT * FROM #schedule;
**[LiveDemo](https://data.stackexchange.com/stackoverflow/query/404686)**
**[
](https://data.stackexchange.com/stackoverflow/query/404686)**
您可以使用触发器进行验证:
CREATE TABLE `schedule`(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, order_date DATETIME, dely_date DATETIME); CREATE TRIGGER `schedule_trg_ins` BEFORE INSERT ON `schedule` FOR EACH ROW BEGIN IF NOT(New.dely_date>New.order_date) THEN SIGNAL SQLSTATE '10000' SET MESSAGE_TEXT = 'check constraint on schedule failed during insert'; END IF; END; CREATE TRIGGER `schedule_trg_upd` BEFORE UPDATE ON `schedule` FOR EACH ROW BEGIN IF NOT(New.dely_date>New.order_date) THEN SIGNAL SQLSTATE '10000' SET MESSAGE_TEXT = 'check constraint on schedule failed during update'; END IF; END; INSERT INTO `schedule`(order_date, dely_date) VALUES ('2015-12-24','2015-12-25'); INSERT INTO `schedule`(order_date, dely_date) VALUES ('2015-12-26','2015-12-25'); -- check constraint on schedule failed during insert UPDATE `schedule` SET order_date = '2015-12-26' WHERE id = 1; -- check constraint on schedule failed during update
**[SqlFiddleDemo](http://sqlfiddle.com/#!9/e2b2f)**
](http://sqlfiddle.com/#!9/e2b2f)**