SQL标准是否指定约束验证的顺序并触发触发?

时间:2011-11-21 23:44:52

标签: sql sql-standards

我很好奇我是否可以依赖验证NOT NULL, FOREIGN KEY, UNIQUE, CHECK约束和BEFORE触发器的任何特定顺序。

根据经验我知道MySQL首先检查NOT NULL,然后启动BEFORE触发器,然后检查UNIQUE约束。 Oracle在NOT NULL触发器后检查BEFORE(我相信SQLServer也会这样做,但不记得了)。标准是否对订单有所说明,或者完全取决于数据库供应商?

1 个答案:

答案 0 :(得分:2)

该特定行为似乎是bug in MySQL,它只会影响BEFORE INSERT个触发器,而BEFORE UPDATE触发器的行为正确。

standard(在问题评论中链接)肯定没有明确说明,但它绝对暗示:

  

对于TECi中的每个状态更改SCi,j,由SCi激活的BEFORE触发器,j在其任何一个之前执行   触发事件生效。当这些触发事件生效时,任何AFTER触发器都会被激活   执行TECi的状态变化。

NOT NULL错误应该是INSERTUPDATE的一部分(即触发事件)。标准不应该指定这个。由于您的BEFORE触发器能够同时解决错误,因此绝对无意义可以预先检查一组不是最终更改的约束。新的。

摘要:这实际上并不取决于数据库供应商,因为在之前的触发器之后检查约束总是