我有一个包含 2 列(均为整数)的表,主键由这两列组成。我的应用程序不会对此表执行 UPDATE 语句,并且我正在使用 PostgreSQL。
但我的应用程序通过提前使用特定的表信息为所有表创建 INSERT、DELETE 和 UPDATE 准备好的语句。对于这个特定的表,UPDATE 语句的 WHERE 子句包含这两列,但 SET 子句为空,这会导致错误。
是否有一种特殊形式的 UPDATE 语句除了检查 SQL 是否有效之外什么都不做?
提前致谢...
像这样的说法是错误的选择。不要这样做。
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.