MySQL 在非唯一字段上的重复键

标签 mysql insert-update

我有一个包含各种参数的表格。 表的结构是:id, object_id, param_name, param_value

以下代码有效,但它附加结果而不是更新它们。 事实是我不能使用 ON DUPLICATE KEY因为我的字段是非唯一的(当然 id 除外)

INSERT INTO `params_table` (`object_id`, `param_name`, `param_value`)
SELECT
A.id AS my_object_id,
'XYZ' AS my_param_name,
IF(TMP.abc IS NULL,0,1) AS my_param_value
FROM
ref_table AS A
LEFT JOIN tmp_table AS TMP ON TMP.abc = A.abc
ON DUPLICATE KEY
UPDATE `param_value` = IF(TMP.abc IS NULL,0,1);

最佳答案

ON DUPLICATE KEY子句不仅适用于主键:

If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is performed

因此,除非我遗漏了一些明显的东西,否则您只需要在要使其唯一的列组合上创建一个唯一索引:

ALTER TABLE params_table
ADD UNIQUE unique_object_param(object_id,param_name);

关于MySQL 在非唯一字段上的重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816720/

相关文章:

php - 将 5 个 mysql 查询变成 1 个

php - 使用php从数据库中检索数据并显示在表格中

javascript - 将集合映射到 upsert 到数据库中。如何批量更新插入?

mysql - Max with Having 子句

mysql - 从 MySQL 中的信息模式获取索引方向

具有选择不同列的 c# mysql 查询

Django 更新现有模型字段

mysql - 重复更新时插入获取 "new"生成的 id

mysql - 从源表更新目标表中具有相同名称记录的记录

sql-server - 运行更新查询时出现 "Subquery returned more than 1 value"错误