有没有办法让MySQL自动回滚第一个错误/警告的任何事务?
现在如果一切顺利,它会提交,但是在失败时它会使事务处于打开状态,而在另一个事务开始时它会从失败的事务中提交不完整的更改。所以我需要自动回滚那些失败的交易..
(我正在执行来自php的查询,但我不想在php中检查失败,因为它会在mysql服务器和网络服务器之间进行更多调用。)
谢谢
答案 0 :(得分:1)
抱歉,您需要自己动手。 我不是PHP人员,但在SQL中:如果你创建一个事务并在事务中做几个MySQL操作,如果你回滚事务,一切都将被回滚。注意:您需要使用事务存储引擎,并且必须将自动提交设置为关闭。
如果你关心的只是交易协调流量,那么你可以创建一个存储过程并简单地调用它。
数据库未自动提交或回滚的原因是因为它不知道您要执行的操作,在应用程序中提交某些数据并回滚其他数据可能是可以接受的。
答案 1 :(得分:1)
我不知道这样的功能,但我也没有看到如何检查失败意味着更多的电话:
try:
<my code>
except:
transaction.rollback()
raise
else:
transaction.commit()
- 它在Python / Django中,但它应该直接转换为PHP - 无论是否存在问题(异常),它都需要完全相同数量的代码来启动新事务。
答案 2 :(得分:0)
将autocommit设置为false的关键点。
<?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();
?>