插入DUPLICATE KEY UPDATE替换UPDATE

时间:2012-08-24 19:08:24

标签: mysql insert on-duplicate-key

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

现在,当我想更新具有不同值的多个列时,我可以运行如下查询:

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

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


编辑:我刚刚发现了一个潜在的问题,即竞争条件。如果一个用户在另一个用户正在编辑它时删除了一行并且他们保存了信息,则编辑将重新创建该行。 (可以用作功能或错误。)

1 个答案:

答案 0 :(得分:2)

my comment above(链接到另一个海报建议使用已知记录的INSERT ... ON DUPLICATE KEY UPDATE对性能影响的问题),可以使用多表{{3}使用UPDATE

从常量实现的表的语法
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