在 MySQL 中,你可以使用以下方法來查詢未提交的事務:
使用 SHOW PROCESSLIST
命令:
SHOW PROCESSLIST;
這將顯示當前所有連接到 MySQL 服務器的進程。你可以查看 Info
列中的事務信息。如果事務尚未提交,Info
列可能會顯示類似 “Waiting for table lock” 的信息。
使用 SHOW ENGINE INNODB STATUS
命令:
SHOW ENGINE INNODB STATUS;
這將顯示 InnoDB 存儲引擎的詳細信息,包括當前正在運行的事務。在 “LATEST DETECTED DEADLOCK” 部分,你可以查看是否有未提交的事務導致死鎖。如果有未提交的事務,你可以查看 Trx_mysql_thread_id
和 Trx_query
列以獲取更多關于這些事務的信息。
使用 SELECT ... FOR UPDATE
語句:
SELECT * FROM your_table WHERE some_condition FOR UPDATE;
這個查詢會鎖定滿足條件的行,直到當前事務提交。如果在事務提交之前執行另一個查詢,將會阻塞,直到鎖被釋放。這可以幫助你檢測未提交的事務。
請注意,這些方法并不能100%保證找到所有未提交的事務,因為它們只能提供關于當前連接和事務的信息。然而,它們可以幫助你識別可能導致性能問題或死鎖的未提交事務。