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

标签 mysql innodb

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

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

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

最佳答案

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

您可以使用 show innodb statusshow engine innodb status 查看交易但我认为您不能对这些交易发出 promise 。

information_schema 中的

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

如果您使用 START TRANSACTION 运行事务在存储过程中,您可以手动处理提交和回滚。你甚至可以 set autocommit为 0 以控制何时回滚和何时提交。

关于mysql - 如何确定 MySQL 事务中是否有未提交的写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34303079/

相关文章:

php - 根据另一个表按值之和对表数据进行排序

MySQL 5.7 GENERATED ALWAYS 列定义为子查询

mysql - 使用 innodb_buffer_pool 和查询缓存

MySQL 表组织和优化 (Rails)

php - 如何在语句执行期间保持临时 mysqli 表在 php 中可用?

mysql - 为什么这个 mysql 表副本会生成重复行

php - WordPress 表前缀不能为空

MySQL MyISAM 和 innoDB 内存使用

mysql - 在 cloud9 上安装 mongrel 报错

mysql - Ruby 和 MySQL UTF-8 字符