首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中,如果我在没有提交的情况下断开连接,而不是提交事务,我可以让MySQL回滚事务吗?

问在PHP中,如果我在没有提交的情况下断开连接,而不是提交事务,我可以让MySQL回滚事务吗?
EN

Stack Overflow用户
提问于 2010-10-25 23:59:19
回答 3查看 1.8K关注 0票数 1

如果我运行以下PHP,我不希望在test表中插入任何值,因为我有一个尚未提交的事务:

代码语言:javascript
复制
$db = mysql_connect("localhost","test","test");
mysql_select_db("test");
mysql_query("begin transaction;");
mysql_query("insert into Test values (1);") or die("insert error: ". mysql_errror());
die('Data should not be commited\n');
mysql_query("commit;"); // never occurs because of the die()

但相反,它似乎不管怎样都要承诺。对于不使用站点上其他地方事务的PHP,有没有办法在不关闭自动提交的情况下关闭此行为?

编辑:这只是一个愚蠢的打字错误。它应该是“开始事务”或“开始”。不是"begin transaction“。很抱歉浪费大家的时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-26 00:07:08

使用mysql_query('BEGIN')。SQL "BEGIN TRANSACTION“无效(实际上,mysql_query对该查询返回false,这意味着存在错误)。它不能工作,因为您从未启动过事务。

票数 3
EN

Stack Overflow用户

发布于 2010-10-26 00:18:19

启动事务的语法为:

代码语言:javascript
复制
START TRANSACTION

您正在谈论的特性是AUTOCOMMIT。如果你不想要它,你必须禁用它:

代码语言:javascript
复制
SET autocommit = 0

参考资料可以在http://dev.mysql.com/doc/refman/5.1/en/commit.html上找到

我还建议您测试所有mysql_...()函数的返回值。您不能假设它们总是能成功运行。

票数 1
EN

Stack Overflow用户

发布于 2012-12-25 00:12:56

默认情况下,事务不会回滚。您的应用程序代码有责任决定如何处理此错误,是重试还是回滚。

如果您想要自动回滚,手册中也有解释:

代码语言:javascript
复制
The current transaction is not rolled back. To have the entire transaction roll back, start the server with the `--innodb_rollback_on_timeout` option.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4016434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档