Mysql
可能使 MySQL COMMIT 查詢失敗的條件?
我有一個應用程序,我在 MySQL 獨立伺服器上執行顯式
COMMIT
查詢COMMIT;
在絕大多數情況下,查詢按預期工作,但有時查詢似乎成功但同時似乎沒有將事務送出到數據庫。
COMMIT
所以我正在研究查詢可能失敗的可能性。我發現了這個類似的問題:https ://stackoverflow.com/questions/3960189/can-a-commit-statement-in-sql-ever-fail-how但是在官方的MySQL 文件中從未提到 a
COMMIT
可能會失敗。我想了解送出查詢在哪些情況下可能會失敗以及如何重現它,可能由官方文件頁面支持。
問題不在
COMMIT
查詢上,問題在於在該事務期間發生了隱式回滾。正如文件所說,如果在事務期間發生死鎖,就會發生這種情況。
這完全取決於您如何設置交易。
如果你有一系列的, , 和
START TRANSACTION
查詢,有一些命令會觸發隱式送出:COMMIT;``INSERT``UPDATE``DELETE
- 更改表
- 創建索引
- 刪除數據庫
- 刪除索引
- 刪除表
- 重命名表
- 截斷表
- 鎖定表
- 解鎖桌子
- 設置自動送出 = 1
- BEGIN(可以打破另一個
BEGIN
或START TRANSACTION
)- 開始交易(可以打破另一個
START TRANSACTION
或BEGIN
)我之前在 DBA StackExchange 中提到過這一點
Mar 06, 2018
:您能否回滾處於“將更改表送出到儲存引擎”狀態的查詢Aug 21, 2015
: MySQL 的事務性 DDL 工作流Feb 12, 2014
: ACID 事務 innodb 中的行鎖定Mar 15, 2013
: MySQL 備份 InnoDB您可以在 MySQL 5.7 Docs 中查看觸發隱式送出的最新命令列表。為什麼要考慮隱式送出?數據可能過早或過晚與其他數據脫離上下文。
除了這些命令之外,終止數據庫連接將隱式回滾事務。您應該監視狀態變數Aborted_connects和Aborted_clients以查看數據庫連接是否在進入或會話中失敗。