INSERT ON DUPLICATE KEY UPDATE作为UPDATE的替代项



这个问题在某种程度上是关于"最佳实践"的,但也是对潜在问题的搜索。我希望能够在不运行多个查询和不使用超级复杂查询的情况下,对多个字段运行更新并分配不同的值。因此,我所做的是创建一个表,其中包含主键和作为唯一键的"name"列。

现在,当我想用不同的值更新多个列时,我可以运行这样的查询:

INSERT INTO my_table (name, description) VALUES ('name', 'mydescription'), ('name2', 'description2') ON DUPLICATE KEY UPDATE description = VALUES(description)

这是个坏主意吗?有更好的方法吗?标准警察会来逮捕我吗?


编辑:我刚刚注意到了一个潜在的问题,那就是比赛条件。如果一个用户删除一行,而另一个用户正在编辑该行并保存信息,则编辑将重新创建该行。(这可能被用作一个功能或错误。)

根据我上面的评论(链接到另一位发布者建议使用INSERT ... ON DUPLICATE KEY UPDATE会对性能产生影响的问题,其中已知存在记录),可以使用多表UPDATE语法,使用UNION:从常量中生成一个表

UPDATE my_table JOIN (
    SELECT 'name' AS name, 'mydescription' AS description
  UNION ALL
    SELECT 'name2', 'description2'
) t USING (name) SET my_table.description = t.description

最新更新