【发布时间】:2012-08-24 19:08:23
【问题描述】:
这个问题有点关于“最佳实践”,但也是对潜在问题的搜索。我希望能够在不运行多个查询且不使用超级复杂查询的情况下对多个字段运行更新并分配不同的值。所以,我所做的是创建了一个具有主键和“名称”列作为唯一键的表。
现在,当我想用不同的值更新多个列时,我可以运行如下查询:
INSERT INTO my_table (name, description) VALUES ('name', 'mydescription'), ('name2', 'description2') ON DUPLICATE KEY UPDATE description = VALUES(description)
这是个坏主意吗?有一个更好的方法吗?标准警察会来逮捕我吗?
编辑:我确实注意到了一个潜在的问题,即竞争条件。如果一个用户在另一个用户编辑一行时删除了一行并保存了信息,则编辑将重新创建该行。 (这可以用作功能或错误。)
【问题讨论】:
-
这是一个类似的问题,但我想更多地询问这是否允许。在这种情况下,我不太担心性能(我知道,我知道),因为应用程序被包含并限制使用。但是有一个简单的替代方案吗?使用
update执行此操作的唯一方法是使用UPDATE并带有一个有点难看的case 条件。 -
它有效,而且非常简洁。请参阅下面的答案以获取替代方法。
标签: mysql insert on-duplicate-key