当前位置: 首页 > 知识库问答 >
问题:

是否有一种特殊形式的UPDATE语句只检查有效的SQL?

明安阳
2023-03-14

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

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

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

提前致谢...

共有2个答案

湛联
2023-03-14

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

井昊乾
2023-03-14

像这样的声明是错误的选择。不要这样。

update foo set bar = bar;

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

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

使用“位置错误”检查错误。

update foo set bar = bar where false;

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

这两个查询的执行计划完全不同。用解释分析进行检查。

 类似资料:
  • 我试图摆脱写歪斜,并尝试使用可序列化的隔离级别,但我反而遇到了死锁。我发现可序列化隔离级别可能会导致死锁,原因如下: 这个级别类似于 REPEATABLE READ,但 InnoDB 隐式将所有纯 SELECT 语句转换为 SELECT ...锁定共享模式 所以,我试着像这样使用< code>REPEATABLE READ(没有id为“some_id”的行): 结果,我在连接2中收到了以下消息:<

  • 以下是场景: 我有一个日期和一个不同的日期格式。示例: 日期:2016-10-19 日期格式:“DD-MM-YYYY”。 我需要检查这个日期是否有效。 我尝试过跟踪事情 d.isValid()每次返回false。Moment.js解析给定格式的日期吗? 然后我尝试先在中格式化日期,然后将其传递给矩。js: 现在<代码>日期。isValid()给了我想要的结果,但现在是时候了。js日期对象创建两次。

  • 我正在制作一个类似游戏24的程序。 我需要检查用户的输入(一个使用程序提供的四个随机数的数学方程),看看用户给出的数字是否只有一个数字。 例如: 程序吐出6 4 9 5 用户可以输入9 5 6 4(等于24)。 但是我不希望他们能够做任何像95-64这样的事情(不对,只是一个例子)来制造24。 我如何检查等式中的数字是否只有一位数? /***接受用户的数学问题。*然后...*确保输入的数学问题遵循

  • 假设: 只有一个特定的线程设置了某个引用字段(不是长或双精度,所以写入它是原子的) 有任意数量的线程可能会读取同一个字段 稍微陈旧的读取是可以接受的(最多几秒钟) 在这种情况下,您需要挥发性或原子参考或类似的东西吗? 该条指出: 如果您严格遵守单一写入器原则,则不需要内存障碍。 这似乎表明,在我描述的情况下,你真的不需要做任何特殊的事情。 我做了一个测试,结果很奇怪: 有时运行this会输出“线程

  • 问题内容: 如何使用Node的驱动程序检查ObjectID是否有效 我试过了 : 但是我不断收到异常,而不是对或错。(例外只是一个“ throw e; // process.nextTick错误,或“第一次滴答”中的“ error”事件” 问题答案: 不知道函数来自哪里,但是不在node-mongodb- native中 。 如果要检查由24个十六进制字符组成的字符串,则可以使用此正则表达式。 取