Mysql
MySQL - 使用回滾的最佳實踐
如果任何 DML 操作失敗,使用 ROLLBACK 操作的最佳實踐/推薦方式是什麼?
有任何 ROLLBACK、COMMIT 機制嗎?
僅供參考:我正在使用符合原子性的 InnoDB 表。
有兩種方法不送出事務
- 顯式回滾
- 關閉沒有送出的連接
根據更適合應用程序邏輯的內容,它們都可以很好地使用。
何時顯式回滾?
如果要重用連接。如果您想盡可能縮短交易時間(這是一件好事)。
何時關閉無送出的連接?
如果事務是一次性任務,並且您希望簡化錯誤處理。
幾件事情要考慮。
- 不要長時間保留未送出的事務。當應用程序打開一個 trx,去做其他事情,稍後回來完成並送出事務時,通常會發生這種情況。這真的很痛。它會導致高 CPU 使用率並降低性能。
- ROLLBACK 通常進入
except ...
塊(或適用於特定語言的任何內容)。但是 ROLLBACK 本身可能會失敗,所以一定要正確處理異常,避免出現“Failed to rollback a transaction”錯誤。- ROLLBACK 所花費的時間通常比您預期的要長。如果事務很大,則回滾比事務中所有先前的語句花費的時間更多。使交易盡可能短。