这个问题有点关于“最佳实践”,也是对潜在问题的搜索。我希望能够在多个字段上运行更新并分配不同的值,而无需运行多个查询并且不使用 super 复杂的查询。因此,我所做的是创建一个表,其中包含主键和“名称”列作为唯一键。
现在,当我想用不同的值更新多个列时,我可以运行这样的查询:
INSERT INTO my_table (name, description) VALUES ('name', 'mydescription'), ('name2', 'description2') ON DUPLICATE KEY UPDATE description = VALUES(description)
这是个坏主意吗?有一个更好的方法吗?标准警察会来抓我吗?
编辑:我确实注意到一个潜在的问题,即竞争条件。如果一个用户删除一行而另一个用户正在编辑它并且他们保存了信息,则编辑将重新创建该行。 (可以用作功能或错误。)
最佳答案
进一步my comment above (链接到一个问题,其中另一张贴者建议使用已知存在记录的 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
关于mysql - INSERT ON DUPLICATE KEY UPDATE 替代 UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115284/