小编典典

更新失败时的MySQL事务回滚

sql

用一个简单的交易

START TRANSACTION;
UPDATE posts SET status='approved' where post_id='id' AND status != 'approved';
.. other queries ...
COMMIT;

我只想在更改状态时执行一次交易;但是UPDATE当没有更新任何行时,上面的操作不会出错以回滚该事务。

我如何将事务限制为仅在更新行时提交(我的意思是状态已更改)。


阅读 195

收藏
2021-03-23

共1个答案

小编典典

这是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
2021-03-23