mysql_query("START TRANSACTION");
mysql_query("UPDATE foo = 'bar'");
die();
die()
之前,我可以COMMIT
或ROLLBACK
停止交易。看看我的表,看起来更新不会发生,但如果我稍后在另一个脚本中运行查询,他们仍然是该初始事务的一部分吗?直到我COMMIT
或ROLLBACK
交易仍然“开放”?
mysql_query("START TRANSACTION");
mysql_query("UPDATE foo = 'bar'");
die();
die()
之前,我可以COMMIT
或ROLLBACK
停止交易。看看我的表,看起来更新不会发生,但如果我稍后在另一个脚本中运行查询,他们仍然是该初始事务的一部分吗?直到我COMMIT
或ROLLBACK
交易仍然“开放”?
如果死亡连接到mysql然后是,交易是关闭的。如果你刚刚离开交易挂起,但你会遇到麻烦。
我会建议确保事务和提交在相同的mysql_query中,如果在所有人类可能的情况下确保它实际发生。
这取决于您的序列化级别。如果事务既没有提交也没有回滚,它应该在一段时间后超时并回滚到DB中。但在此之前,这是一个未完成的事务,可能会导致其他不可序列化事务中的选择不一致。依赖于它的level:
返回一致的值根据http://www.php.net/manual/en/function.mysql-close客户.php: “通常不需要使用mysql_close(),因为在脚本执行结束时,非持久性的打开链接会自动关闭。“ 由于die()结束脚本的执行,我会假设这意味着数据库连接已关闭? – Matthew 2010-01-18 16:24:11
不幸的是,我没有使用mysqli,所以我不能一次做多个查询。 – Matthew 2010-01-18 16:45:49
这是正确的,我只是想知道你是否真的会彻底忠实于你的交易被打开后总是死去。我的意思是,你真的会在真实生活场景中死去多久?这就是为什么我提到你可能不应该依靠die()来为你关闭交易。 – 2010-01-19 05:55:31