我正在使用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');
这里我希望第一个insert语句失败。但令人惊讶的是,两个查询都通过了,表中有两行。
任何人都可以解释原因吗?
由于
答案 0 :(得分:10)
MySQL没有实现CHECK约束。来自latest (5.6) fine manual:
CHECK
子句被解析但被所有存储引擎忽略。
因此解析语法是为了兼容其他SQL,但是没有实现检查。
如果未满足所需条件,您可以使用BEFORE INSERT和BEFORE UPDATE触发threw an exception伪造您的CHECK约束。
答案 1 :(得分:2)
The CHECK clause is parsed but ignored by all storage engines.
答案 2 :(得分:1)
CHECK约束