2012-02-13 378 views
4

我使用MySQL,这里是一个简单的查询集:MySQL的:CHECK约束与日期

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'); 

在这里,我希望第一个插入语句失败。但令人惊讶的是,查询都通过了,表中有两行。

任何人都可以请解释为什么吗?

谢谢

回答

10

MySQL没有实现CHECK约束。从latest (5.6) fine manual

CHECK子句被解析但被所有存储引擎忽略。

因此,为了兼容其他SQL,语法被解析,但检查没有实现。

您可以使用BEFORE INSERT和BEFORE UPDATE触发器假冒您的CHECK约束,如果未满足所需条件,则触发threw an exception

+1

+1的触发器 – 2012-02-13 01:09:05