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

时间:2011-04-28 09:49:29

标签: 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);

1 个答案:

答案 0 :(得分:6)

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

  

如果指定ON DUPLICATE KEY   UPDATE,并插入一行   会导致a中的重复值   UNIQUE索引或PRIMARY KEY,UPDATE   执行旧行

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

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