Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL更新未返回零计数_Sql_Postgresql_Count_Sql Update - Fatal编程技术网

PostgreSQL更新未返回零计数

PostgreSQL更新未返回零计数,sql,postgresql,count,sql-update,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行,对吗?请告诉我如何在原始记录未更新时获得零计数。您的查询正在更新记录,因此返回1 更新不会检查正在替换的值是否已经存在。无条件地设置列的值

我尝试一次又一次地用相同的值更新特定记录,但它总是返回受影响的行值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行,对吗?请告诉我如何在原始记录未更新时获得零计数。

您的查询正在更新记录,因此返回1


更新不会检查正在替换的值是否已经存在。

无条件地设置列的值始终会影响它,即使新值与旧值相同。如果只想查看值现在是否不同,可以检查受以下内容影响的行数

UPDATE users SET active=1 WHERE id = 304 AND active != 1;

这样,更新查询只匹配尚未激活的行

,正如Schlansker已经指出的那样,以下内容将满足您的要求

UPDATE users SET active = 1 WHERE id = 304 AND active <> 1;
但是,不要忘记事务隔离。也就是说,如果两个并行事务正在更新同一行,或者其中一个正在删除该行,则可能会导致意外状态。这取决于事务隔离级别和应用程序其余部分的设计方式