1

考虑下表:

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和之间to_val?因此,从一个空表中,第二个查询应该会因约束失败而失败:

INSERT INTO `demo` (`from_val`, `to_val`) VALUES (1,10),(11,20);
INSERT INTO `demo` (`from_val`, `to_val`) VALUES (5,15);

在输入/更新的过程中验证数据是微不足道的,我只是想知道 MySQL 是否可以在 RDBMS 级别强制执行此操作。

4

1 回答 1

2

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

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

解决方法是在表上定义BEFORE INSERTBEFORE UPDATE触发器;这些可以执行您需要的任何检查,并引发异常。

于 2012-09-12T20:54:52.157 回答