考虑下表:
CREATE TABLE `demo` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
`from_val` BIGINT(20) DEFAULT NULL,
`to_val` BIGINT(20) DEFAULT NULL,
PRIMARY KEY (`id`)
);
是否可以创建一个约束,以阻止同一个表中存在第二条记录,其中from_val
或 to_val
位于另一条记录的from_val
和{ {1}}?因此,从空表中,第二个查询应该失败并出现约束失败:
to_val
验证/ update中的数据是微不足道的,我只是想知道MySQL是否可以在RDBMS级别强制执行此操作。
答案 0 :(得分:2)
不,MySQL不支持(或强制执行)任何声明性约束,这种约束会在您指定的条件下引发异常。
元组(5,15)
(“第二个查询”)中的值与先前插入表格中的任何行中的任何值都不冲突... (1,10),(11,20)
,至少在MySQL中声明性约束的可用内容。
解决方法是在表格中定义BEFORE INSERT
和BEFORE UPDATE
触发器;那些可以执行你需要的任何检查,并提出异常。