用一个简单的事务作为
START TRANSACTION;
UPDATE posts SET status='approved' where post_id='id' AND status != 'approved';
.. other queries ...
COMMIT;
我只想在更改状态时执行一次交易;但是上面的 UPDATE
在没有更新行时不会给出回滚事务的错误。
如何限制事务仅在行更新时才提交(我的意思是状态已更改)。
最佳答案
这是在 PHP 中的(尚未测试,需要适应您的情况):
mysql_query('START TRANSACTION;')
mysql_query("UPDATE posts SET status='approved' where post_id='id' AND status != 'approved';");
if (mysql_affected_rows()){
mysql_query('COMMIT');
} else {
mysql_query('ROLLBACK');
}
或者,如果您想聪明一点并在 SQL 中执行(使用 ROW_COUNT()
和 IF
):
START TRANSACTION;
UPDATE posts SET status='approved' where post_id='id' AND status != 'approved';
SELECT ROW_COUNT() INTO @affected_rows;
-- .. other queries ...
IF (affected_rows > 0) THEN
COMMIT;
ELSE
ROLLBACK;
END IF
关于更新失败时Mysql事务回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9327668/