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

时间:2015-03-19 10:41:46

标签: sql postgresql

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

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

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

提前致谢...

2 个答案:

答案 0 :(得分:3)

您可以使用EXPLAIN UPDATE返回有效语句的查询计划,但如果该语句无效则返回错误。

答案 1 :(得分:3)

像这样的陈述是错误的选择。不要这样做。

update foo set bar = bar;

虽然基础数据似乎没有改变,但PostgreSQL实际上执行了更新及其所有副作用。副作用可能包括这些。

  • 此更新会影响未确定的行数。
  • 写入事务日志。 (可能会写一个很多。)
  • 触发触发器。
  • 强制执行外键约束,可能是级联更新。

使用WHERE FALSE检查错误。

update foo set bar = bar where false;

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

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