用一个简单的交易
START TRANSACTION; UPDATE posts SET status='approved' where post_id='id' AND status != 'approved'; .. other queries ... COMMIT;
我只想在更改状态时执行一次交易;但是UPDATE当没有更新任何行时,上面的操作不会出错以回滚该事务。
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):
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