Mysql

MySQL - 使用回滾的最佳實踐

  • May 20, 2020

如果任何 DML 操作失敗,使用 ROLLBACK 操作的最佳實踐/推薦方式是什麼?

有任何 ROLLBACK、COMMIT 機制嗎?

僅供參考:我正在使用符合原子性的 InnoDB 表。

有兩種方法不送出事務

  • 顯式回滾
  • 關閉沒有送出的連接

根據更適合應用程序邏輯的內容,它們都可以很好地使用。

何時顯式回滾?

如果要重用連接。如果您想盡可能縮短交易時間(這是一件好事)。

何時關閉無送出的連接?

如果事務是一次性任務,並且您希望簡化錯誤處理。

幾件事情要考慮。

  • 不要長時間保留未送出的事務。當應用程序打開一個 trx,去做其他事情,稍後回來完成並送出事務時,通常會發生這種情況。這真的很痛。它會導致高 CPU 使用率並降低性能。
  • ROLLBACK 通常進入except ...塊(或適用於特定語言的任何內容)。但是 ROLLBACK 本身可能會失敗,所以一定要正確處理異常,避免出現“Failed to rollback a transaction”錯誤。
  • ROLLBACK 所花費的時間通常比您預期的要長。如果事務很大,則回滾比事務中所有先前的語句花費的時間更多。使交易盡可能短。

引用自:https://dba.stackexchange.com/questions/267547