1

这个问题有点关于“最佳实践”,但也是对潜在问题的搜索。我希望能够在不运行多个查询且不使用超级复杂查询的情况下对多个字段运行更新并分配不同的值。所以,我所做的是创建了一个带有主键和“名称”列作为唯一键的表。

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

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

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


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

4

1 回答 1

2

除了我上面的评论(链接到另一个发布者建议使用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
于 2012-08-24T19:17:34.623 回答