【问题标题】:UPDATE Query without WHERE Clause不带 WHERE 子句的 UPDATE 查询
【发布时间】:2012-08-28 15:52:54
【问题描述】:

我知道这听起来是一个愚蠢的问题,但我想知道 UPDATE 查询是否可以在没有 WHERE 子句的情况下使用。如果是,在什么条件下?

提前致谢。

【问题讨论】:

  • 在 oracle 中,可以省略where 子句 => 表中的所有行都会更新。我不知道其他 ORDBMS,但我认为这也会更新所有表行。
  • 是的,您可以,因为已经回答了。话虽如此,我对此有两种看法。我已经看到当WHERE 子句被意外省略并且每条记录而不仅仅是一条记录都被更新时发生了灾难。虽然我希望看到 UPDATE 没有 WHERE 被视为语法错误,但我也认为这不是编程语言的工作。

标签: sql database sql-update where-clause


【解决方案1】:

如果不使用WHERE 子句,表上的所有记录都会受到影响

【讨论】:

  • 我还是很困惑。如果我们总是必须为同一张表上的每个更新声明 where 子句,这不是服务器的成本。为什么我们不能只识别上一个查询中的行并将其用于下一个查询?
  • 如果这正是我想要发生的事情怎么办?需要加WHERE 1=1吗?
  • @ChristoKiwi PostgreSQL 在这种情况下会抛出错误 (Unsafe query: 'Update' statement without 'where' updates all table rows at once) 并且不会进行任何更改。看起来如果没有WHERE 子句,就不允许进行更新。但是,您的建议 WHERE 1=1 或任何其他琐碎真实的陈述(例如 WHERE id > 0)似乎成功了。
  • 我已经使用多种风格的 SQL 25 年了,这是我第一次看到这个警告。我认为看到它很好,但我需要一个更好的方法来避免“1 = 1”的诡计......
  • 您可以使用 primary_key = primary_key 而不是 where 1=1。这样对我来说更具视觉意义。
【解决方案2】:

所以,我认为当您出于某种原因想要更新整个字段时,例如将用户注册状态更新为对所有用户免费。

UPDATE users SET status = "free";

【讨论】:

    【解决方案3】:

    SQL 中的UPDATE 语句用于更新表中的记录。我们可以使用UPDATE 语句修改表中的一条或多条记录(行)。如果在UPDATE语句中不使用WHERE子句,则表中的所有记录都会被更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2012-11-20
      • 2017-12-10
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多