首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:事务失败时自动回滚

MySQL:事务失败时自动回滚
EN

Stack Overflow用户
提问于 2010-05-11 05:16:06
回答 3查看 3.9K关注 0票数 1

有没有办法将MySQL设置为在出现第一个错误/警告时自动回滚任何事务?

现在,如果一切顺利,它会提交,但在失败时,它会让事务保持打开状态,而在另一个事务开始时,它会从失败的事务中提交不完整的更改。所以我需要自动回滚那些失败的事务。

(我正在从php执行查询,但我不想在php中检查失败,因为它会在mysql服务器和webserver之间进行更多的调用。)

谢谢

EN

回答 3

Stack Overflow用户

发布于 2010-05-11 05:33:05

抱歉,您需要自己完成此操作。我不是一个PHP人员,但在SQL语言中:如果您创建一个事务并在事务中执行几个MySQL操作,如果您回滚事务,则所有内容都将回滚。注意:您需要使用事务性存储引擎,并且必须将自动提交设置为off。

如果您所关心的只是事务协调流量,那么您可以创建一个存储过程并简单地调用它。

数据库不自动提交或回滚的原因是因为它不知道您正在尝试做什么,在应用程序中提交一些数据和回滚其他数据可能是可以接受的。

票数 1
EN

Stack Overflow用户

发布于 2010-05-11 14:25:15

我不知道这样的功能,但我也不明白检查失败如何意味着更多的调用:

代码语言:javascript
复制
try:
     <my code>
except:
     transaction.rollback()
     raise
else:
     transaction.commit()

--它是用Python/Django编写的,但它应该直接转置为PHP --无论是否有问题(异常),启动新事务都需要完全相同的代码量。

票数 1
EN

Stack Overflow用户

发布于 2013-10-01 12:42:56

关键是要将自动提交设置为false。

代码语言:javascript
复制
<?php
$database= new mysqli("sever", "user", "key", "database");
$database->autocommit(FALSE);
$error=0;

//asumming we want to delete a users infomation from two table
$database->query("delete from `pay` where `user`=1 ")?NULL:$error=1;
$database->query("delete from `users` where `id`=1 ")?NULL:$error=1;

if($error=0){
    $database->commit();
}  else {
    $database->rollback();
}
$database->close();
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2806510

复制
相关文章

相似问题

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