MySQL的复杂唯一约束

时间:2012-09-12 20:46:17

标签: mysql constraints

考虑下表:

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级别强制执行此操作。

1 个答案:

答案 0 :(得分:2)

不,MySQL不支持(或强制执行)任何声明性约束,这种约束会在您指定的条件下引发异常。

元组(5,15)(“第二个查询”)中的值与先前插入表格中的任何行中的任何值都不冲突... (1,10),(11,20),至少在MySQL中声明性约束的可用内容。

解决方法是在表格中定义BEFORE INSERTBEFORE UPDATE触发器;那些可以执行你需要的任何检查,并提出异常。