2017-06-17 56 views
0

我們有這個真正不想要的更新查詢到我們的表A.並且這個表包含更新表B,C的更新後觸發器。我們殺掉了表A中Update語句的主要事務,問題是否也回滾了表B和C中的更改?或者更新觸發器甚至被調用?因爲我們在整個執行結束前殺死了會話。提前致謝。是在會話終止(事務回滾)後更新觸發器被終止後?

回答

0

如果...

  • 你是在一個事務中,
  • 所有訪問的表是事務表(如使用的是InnoDB,不使用如的MyISAM或MEMORY)

...然後回滾(包括從會話中終止的隱式回滾)回滾全部在事務中進行的更改(包括觸發器所做的更改)以及級聯外鍵操作。

觸發器(和級聯)在MySQL中從不推遲,因此當行正在更新時它們會觸發FOR EACH ROW,但這當然只是學術的,因爲它們所做的所有更改都將隨着回滾而撤消。

如果表A是完整的,那麼表B和C也應該是完整的。當然,最安全的方法是取出最近的備份,並將當前的數據填充與您在備份中找到的數據進行比較,作爲一般性的完整性檢查。當然,這需要頻繁的快照備份。