MySQL 在非唯一字段上的重复键
问题:MySQL 在非唯一字段上的重复键 我有一个包含各种参数的表。表结构为:id, object_id, param_name, param_value 以下代码有效,但它附加结果而不是更新它们。事实是我不能使用ON DUPLICATE KEY因为我的字段是非唯一的(当然除了id) INSERT INTO `params_table` (`object_id`, `param_name`, `p
·
问题: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子句不仅适用于主键:
如果您指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中的重复值,则执行旧行的 UPDATE
因此,除非我遗漏了一些明显的东西,否则您只需要在要使其唯一的列组合上创建一个唯一索引:
ALTER TABLE params_table
ADD UNIQUE unique_object_param(object_id,param_name);
更多推荐
已为社区贡献23584条内容
所有评论(0)