是否有一种特殊形式的 UPDATE 语句除了检查 SQL 是否有效之外什么都不做?

Mal*_*glu 5 sql postgresql

我有一个包含 2 列(均为整数)的表,主键由这两列组成。我的应用程序不会对此表执行 UPDATE 语句,并且我正在使用 PostgreSQL。

但我的应用程序通过提前使用特定的表信息为所有表创建 INSERT、DELETE 和 UPDATE 准备好的语句。对于这个特定的表,UPDATE 语句的 WHERE 子句包含这两列,但 SET 子句为空,这会导致错误。

是否有一种特殊形式的 UPDATE 语句除了检查 SQL 是否有效之外什么都不做?

提前致谢...

Mik*_*ll' 6

像这样的说法是错误的选择。不要这样做。

update foo set bar = bar;
Run Code Online (Sandbox Code Playgroud)

尽管底层数据似乎没有改变,但 PostgreSQL 实际上执行了更新,并带来了所有副作用。副作用可能包括这些。

  • 更新影响不确定数量的行。
  • 写入事务日志。(可能会写很多
  • 触发火力。
  • 强制外键约束,可能是级联更新。

用于WHERE FALSE检查错误。

update foo set bar = bar where false;
Run Code Online (Sandbox Code Playgroud)

简单的测试将显示没有更新发生,没有触发器触发等。

这两个查询的执行计划完全不同。检查用explain analyze.