mysql - 开始新事务是否强制当前事务提交?

标签 mysql database transactions commit autocommit

我的服务器使用事务将数据写入数据库,如果所有查询都成功,它将提交,否则将回滚。现在我想让服务器的两个实例同时在同一个数据库和表上工作。

当我阅读 mysql 的事务文档时,我注意到这句话:“开始一个事务会导致任何待处理的事务被提交”。这是否意味着如果服务器 A 启动事务 A,而事务 A 尚未完成,服务器 B 启动事务 B,事务 A 将被强制提交?这对我来说没有意义。如果是这种情况,我如何确保在事务 A 正常完成之前不执行事务 B? SET autocommit = 0 可以解决这个问题吗?

最佳答案

假设当您说您希望服务器的两个实例同时工作时,您的意思是两个单独的 session 在同一台服务器上运行。

“开始事务会导致提交任何未决事务”这句话仅指同一 session 中的任何未决事务。来自 http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

The statements listed in this section (and any synonyms for them) implicitly end any transaction active in the current session, as if you had done a COMMIT before executing the statement.

因此,如果 session B 在 session A 提交之前启动事务,它不会强制 session A 提交。

关于mysql - 开始新事务是否强制当前事务提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19984847/

相关文章:

MySQL:在同一个表中相交

sql - 锁定选定的行,以便其他事务在读取时忽略它们

sql - 需要评论策略

sql - 为什么这个事务不回滚?

postgresql - 事务可以在其他事务之前提交和序列化之前提交吗?

java - 事务和捕获 block

php - mysql(查询) 或 php switch 语句哪个更快?

mysql - 如何查询包含对象数组的 MySQL JSON 列

mysql - SQL Select 在比较行时无休止地运行

php - 如何使用 PHP 从数据库中检索数据?