启动新事务会强制当前事务提交吗?

时间:2013-11-14 17:55:10

标签: mysql transactions autocommit

我有使用事务将数据写入数据库的服务器,如果所有查询都成功,它将提交否则它将回滚。现在我想让两个服务器实例同时在同一个数据库和表上工作。 当我阅读mysql的事务文档时,我注意到这句话:“开始一个事务导致任何挂起的事务被提交”。这是否意味着如果服务器A启动事务A而事务A尚未完成,则服务器B启动事务B,事务A被强制提交?这对我来说没有意义。如果是这样的话我怎么能确保在事务A正常完成之前不执行事务B? SET autocommit = 0会替代这个问题吗?

2 个答案:

答案 0 :(得分:1)

假设您说您希望服务器的两个实例同时工作,则表示在同一服务器上运行两个单独的会话。

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

  

本节中列出的语句(以及它们的任何同义词)隐式结束当前会话中活动的任何事务,就好像您在执行语句之前已完成COMMIT一样。

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

答案 1 :(得分:0)

mysql> CREATE TEMPORARY TABLE super(id int);
Query OK, 0 rows affected (0.04 sec)

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO super VALUE(1);
Query OK, 1 row affected (0.00 sec)

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM super;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)