Mysql

可能使 MySQL COMMIT 查詢失敗的條件?

  • July 26, 2021

我有一個應用程序,我在 MySQL 獨立伺服器上執行顯式COMMIT查詢

COMMIT;

在絕大多數情況下,查詢按預期工作,但有時查詢似乎成功但同時似乎沒有將事務送出到數據庫。

COMMIT所以我正在研究查詢可能失敗的可能性。我發現了這個類似的問題:https ://stackoverflow.com/questions/3960189/can-a-commit-statement-in-sql-ever-fail-how

但是在官方的MySQL 文件中從未提到 aCOMMIT可能會失敗。

我想了解送出查詢在哪些情況下可能會失敗以及如何重現它,可能由官方文件頁面支持。

問題不在COMMIT查詢上,問題在於在該事務期間發生了隱式回滾

正如文件所說,如果在事務期間發生死鎖,就會發生這種情況。

這完全取決於您如何設置交易。

如果你有一系列的, , 和START TRANSACTION查詢,有一些命令會觸發隱式送出:COMMIT;``INSERT``UPDATE``DELETE

  • 更改表
  • 創建索引
  • 刪除數據庫
  • 刪除索引
  • 刪除表
  • 重命名表
  • 截斷表
  • 鎖定表
  • 解鎖桌子
  • 設置自動送出 = 1
  • BEGIN(可以打破另一個BEGINSTART TRANSACTION
  • 開始交易(可以打破另一個START TRANSACTIONBEGIN

我之前在 DBA StackExchange 中提到過這一點

您可以在 MySQL 5.7 Docs 中查看觸發隱式送出的最新命令列表。為什麼要考慮隱式送出?數據可能過早或過晚與其他數據脫離上下文。

除了這些命令之外,終止數據庫連接將隱式回滾事務。您應該監視狀態變數Aborted_connectsAborted_clients以查看數據庫連接是否在進入或會話中失敗。

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