PostgreSQL更新没有返回零计数

时间:2009-11-02 05:55:36

标签: sql postgresql count sql-update

我尝试一次又一次地更新具有相同值的特定记录,但它始终将受影响的行值返回为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行吗?我可以知道如何在不更新记录的情况下获得零计数。

3 个答案:

答案 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;

但是,不要忘记事务隔离。即如果两个并行事务正在更新同一行(或者如果其中一个正在删除它),则可能最终处于意外状态。这取决于事务隔离级别以及应用程序的其余部分的设计方式。