我很好奇我是否可以依赖验证NOT NULL, FOREIGN KEY, UNIQUE, CHECK
约束和BEFORE
触发器的任何特定顺序。
根据经验我知道MySQL首先检查NOT NULL
,然后启动BEFORE
触发器,然后检查UNIQUE
约束。 Oracle在NOT NULL
触发器后检查BEFORE
(我相信SQLServer也会这样做,但不记得了)。标准是否对订单有所说明,或者完全取决于数据库供应商?
答案 0 :(得分:2)
该特定行为似乎是bug in MySQL,它只会影响BEFORE INSERT
个触发器,而BEFORE UPDATE
触发器的行为正确。
standard(在问题评论中链接)肯定没有明确说明,但它绝对暗示:
对于TECi中的每个状态更改SCi,j,由SCi激活的BEFORE触发器,j在其任何一个之前执行 触发事件生效。当这些触发事件生效时,任何AFTER触发器都会被激活 执行TECi的状态变化。
NOT NULL
错误应该是INSERT
或UPDATE
的一部分(即触发事件)。标准不应该指定这个。由于您的BEFORE
触发器能够同时解决错误和,因此绝对无意义可以预先检查一组不是最终更改的约束。新的。
摘要:这实际上并不取决于数据库供应商,因为在之前的触发器之后检查约束总是 。