是否在会话终止(事务回滚)后更新触发器被杀死?

时间:2017-06-17 15:55:59

标签: mysql database triggers

我们在表A中有这个真正不需要的更新查询。此表包含更新表B,C的更新后触发器。我们杀死了主要事务,即表A上的Update语句,问题是否也回滚了表B和C的更改?或者更新后的触发器甚至都被调用了?因为我们在整个执行结束之前杀死了会话。提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果...

  • 您正在进行交易,
  • 访问的所有表都是事务表(例如使用InnoDB,不使用例如MyISAM或MEMORY)

...然后回滚(包括杀死会话的隐式回滚)回滚事务中所做的所有更改,包括触发器所做的更改,以及级联外键操作。< / p>

MySQL中永远不会延迟触发器(和级联),因此在更新行时它们会激活FOR EACH ROW,但这当然只是学术性的,因为它们所做的所有更改都将通过回滚撤消。

如果表A完好无损,则表B和C也应完好无损。当然,最安全的方法是提取最新备份,并将当前数据填充与备份中找到的数据进行比较,作为一般的健全性检查。当然,这假设了频繁的快照备份。