Mysql交易问题

时间:2010-10-03 19:37:14

标签: mysql transactions

我的代码:

mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");

insert_query, update_query1, update_query2

mysql_query("COMMIT");
update_query3

如果我将update_query3放在COMMIT之后,为什么COMMIT查询不起作用?如果我把它放在{{1}}之前,它就可以了。这是为什么?真的很奇怪。

谢谢

3 个答案:

答案 0 :(得分:2)

首先禁用自动提交。然后,您开始事务,进行更改并提交它们。然后执行另一个隐式启动另一个事务的查询。为了提交更改,您必须显式调用“COMMIT”,因为自动提交已关闭。

答案 1 :(得分:0)

因为COMMIT(或ROLLBACK)标志着交易的结束。

你必须使用:

mysql_query("COMMIT AND CHAIN");

..到create a new transaction to begin as soon as the current one ends, and the new transaction has the same isolation level as the just-terminated transaction

但它仍然意味着你需要:

mysql_query("COMMIT");

... update_query3之后提交更改。

答案 2 :(得分:0)

update_query3不是任何现有交易的一部分。所以它启动一个新的(隐式)事务。

您永远不会提交由update_query3启动的事务,因此当您关闭连接时它将被回滚。