mysql - INSERT ON DUPLICATE KEY UPDATE 替代 UPDATE

标签 mysql insert on-duplicate-key

这个问题有点关于“最佳实践”,也是对潜在问题的搜索。我希望能够在多个字段上运行更新并分配不同的值,而无需运行多个查询并且不使用 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/

相关文章:

php - 如何使用模型和自定义助手显示数据库中的数据?

mysql - SQL查询按表属性对分组进行计数

php - 单击按钮创建 mysql 事件,每 5 分钟删除表的第一行?

list - 在 Dart 列表的开头插入元素

sql-server - SQL Server : want to insert data into one column, rest nulls: 不让我

mysql - 如何将 INSERT INTO SELECT ON DUPLICATE KEY UPDATE 与 IF 语句一起使用

php - 关于引号的 SQL 查询错误

php - 列计数与第 1 行错误的值计数不匹配

PHP MYSQL 如果存在则更新或如果不存在则插入?

mysql - 条件是重复 key 更新无法正常工作