MySQL 如何处理触发器运行期间的错误?
假如一个错误发生在触发器执行期间,那么 MySQL 处理这种情况如下 −
- 如果一个 BEFORE 触发器失败,则对相应行执行的操作不会被执行。
- 一个 BEFORE 触发器会被插入或修改行的尝试激活,无论此尝试随后是否成功。
- 一个 AFTER 触发器只有当任何 BEFORE 触发器和行操作执行成功时才会被执行。
- 无论是在 BEFORE 还是 AFTER 触发器中,一个错误都会导致触发器调用的整个语句失败。
- 对于事务表,一个语句的失败应当导致语句执行的所有变更回滚。一个触发器的失败会导致语句失败,所以触发器的失败也会导致回滚。对于非事务表,这样的回滚无法完成,所以尽管这个语句失败了,但在错误点之前执行的任何变更仍然有效。
广告