如何确定 MySQL 事务中是否有未提交的写入?

How do I determine if I have uncommitted writes in a MySQL transaction?

我正在处理一个非常复杂的代码库,并希望对它如何与 MySQL 一起工作进行一些反思。 (请注意,我使用的是 InnoDB)。

具体来说,在我正在编写的方法中,我希望确定在其打开的数据库连接中是否有任何未完成的(未提交的)写入。

是否有任何 MySQL 命令或其他方法来检测是否有未提交的写入? (或者换句话说,确定 COMMIT 是否不做任何修改)。

这是一个非常有趣的问题。我认为没有明确的方法可以确定发出提交是否会对您所在的会话产生影响运行。

您可以看到 show innodb statusshow engine innodb status 的交易,但我认为您不能对这些交易发出提交。

INNODB_TRX table in information_schema 将显示当前正在执行的事务:https://dev.mysql.com/doc/refman/5.5/en/innodb-trx-table.html 同样,您无法强制提交它们。您可以通过终止相关进程来回滚它们。

如果你是运行一个事务使用START TRANSACTION in a stored procedure, you can handle commit and rollback manually. You can even set autocommit到0来控制何时回滚和何时提交。