使用简单的交易
START TRANSACTION;
UPDATE posts SET status='approved' where post_id='id' AND status != 'approved';
.. other queries ...
COMMIT;
我想在更改状态时只执行一次交易;但是,如果没有更新行,上面的UPDATE
将不会给出回滚事务的错误。
如果行更新时我怎么能限制事务提交(我的意思是状态改变了)。
答案 0 :(得分:11)
这是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
答案 1 :(得分:5)
您需要在某种编程逻辑中执行此操作 - 也许存储过程最好。
START TRANSACTION
UPDATE
查询IF (some_variable>0) THEN
[运行其他声明,包括COMMIT
] ELSE ROLLBACK