数据库
首页 > 数据库> > MySQL在非唯一字段上的重复键上

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

作者:互联网

我有一个包含所有类型参数的表.
该表的结构是: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,insert-update
来源: https://codeday.me/bug/20190518/1128304.html