我尝试一次又一次地更新具有相同值的特定记录,但它始终将受影响的行值返回为1。
update users set active = 1 where id = 304
1 row(s) affected.
再次使用相同的查询
update users set active = 1 where id = 304
1 row(s) affected.
但第二次更新应该返回受影响的0行吗?我可以知道如何在不更新记录的情况下获得零计数。
答案 0 :(得分:8)
无条件地设置列的值始终“影响”它,即使新值与旧值相同。如果您只想查看值是否现在不同,您可以检查受
之类的行影响的行数UPDATE users SET active=1 WHERE id = 304 AND active != 1;
这样,更新查询只匹配尚未“活动”的行
答案 1 :(得分:3)
您的查询正在更新记录,因此返回1。
更新不会检查值是否已经替换。
答案 2 :(得分:1)
正如施兰斯克已经指出的那样,以下将会满足您的要求。
UPDATE users SET active = 1 WHERE id = 304 AND active <> 1;
但是,不要忘记事务隔离。即如果两个并行事务正在更新同一行(或者如果其中一个正在删除它),则可能最终处于意外状态。这取决于事务隔离级别以及应用程序的其余部分的设计方式。