【问题标题】:How to update all fields but one certain field statement in MySQL?如何在 MySQL 中更新除一个特定字段语句之外的所有字段?
【发布时间】:2024-01-20 11:51:01
【问题描述】:

假设我有一个表 'tbl' 具有 4 字段架构:f1,f2,f3,f4。我有一堆数据(以 csv 形式,其字段的列表顺序与表模式的 [因为我设计它] 但在 csv 中将 field-f3 值保留为 ',,')需要从我的用户那里更正但只留下 f3不变。我想象有这样一个更新声明:

UPDATE tbl VALUES ('new-f1-val','new-f2-val', IGNORE, 'new-f3-val')

当 db engine 看到这个语句时,它会将 IGNORE 识别为系统预定义的保留字/常量,告诉 db engine 忽略(即 NOT TO)更新这个特定字段。我不是在说童话,因为我经常面对用户的这些需求。

MySQL 中是否有这样的语句,无论是当前的还是未来的,或者任何等效的语句/过程来达到相同的结果?

===================================

很多人不明白我为什么要画这种说法,所以我在这里说一下我的实际动机:

  1. 表 'tbl' 可能有很多字段。
  2. 不更新字段 'f3' 是永久条件。
  3. 没有关于可能需要更正哪些其他字段的信息,因此我将更新所有其他字段。
  4. 我希望更新声明简短。
  5. 我希望有一个类似于插入的更新语句 声明而不列出每个字段名称。
  6. 如果存在这样的声明,我可以省力修改我的 “创建插入语句”代码到“更新更新语句”代码。

===================================

编辑: 我添加了用户给我的数据文件格式的描述以完善我的问题。

===================================

【问题讨论】:

  • 为什么不用UPDATE tbl set f1='new-f1-val', f2='new-f2-val'样式更新?
  • 您是否有不希望更新 f3 的情况?
  • @krishna:是的,“不更新 f3”是永久条件。 @sphere:我不想列出其他字段,因为表格可能有很多字段,而且有点乏味。总而言之。如果有这样的语句,我可以很容易地将我的“creating-insert-statement”代码修改为“creating-update-statement”代码。

标签: mysql sql-update except


【解决方案1】:

我从未见过UPDATE 以您在 MySQL 中的方式编写。一个典型的UPDATE 与您想要的内容类似:

UPDATE tbl
SET f1 = 'new-f1-val',
    f2 = 'new-f2-val',
    f4 = 'new-f4-val'
WHERE <some condition>

如果您不想修改 f3 列,只需将其从 UPDATE 语句中删除即可。

【讨论】:

  • 我知道,但我的目的是保存工作以列出彼此的字段。无论如何感谢您的回答。
  • @ScottChu 你的评论对我来说毫无意义。请向我们展示您开始使用的表格,以及您希望它如何处理UPDATE
  • 我希望在不明确列出其他字段名称的情况下使语句简短。我希望有一些非常好的更新,比如没有列出字段列表的插入语句。希望这能解释我的动机。另一个原因是我在评论中回复 sphere 时节省了修改程序代码的工作量。
【解决方案2】:

您应该始终在表中显式添加要更新的列,这是一种很好的做法,尽管您需要缩短查询。
话虽如此,请尝试插入“null”并检查它是否有效。这里不保证,我自己没试过。

【讨论】:

  • 好。请接受答案并关闭问题。得到结果后更新。
【解决方案3】:

查看更新查询语法。 https://dev.mysql.com/doc/refman/5.7/en/update.html

Update tbl set f1=new-f1-val, f2=new-f2-val, f4=new-f4-val

【讨论】:

  • 我对更新语句非常熟悉。我只是不想一一列出彼此的字段。请参考我在 cmets 中对 krishna 和 sphere 的回复。
  • 无论如何,您已经一一列出了这些值。这样,您只需添加要显式分配值的字段。
  • 我只是举个例子。实际案例可能有很多字段。我已经更新了我的问题,以告诉人们我的动机。抱歉打扰你了。
最近更新 更多