MySQL:使用Date检查约束

bdh*_*har 4 mysql sql date

我正在使用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');
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以解释原因吗?

谢谢

mu *_*ort 10

MySQL没有实现CHECK约束.从最新的(5.6)精细手册:

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

因此,语法被解析以兼容其他其他SQL,但未实现检查.

您可以使用BEFORE INSERT和BEFORE UPDATE触发器伪造您的CHECK约束,如果未满足所需条件,则会触发异常.