我正在使用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约束,如果未满足所需条件,则会触发异常.