INSERT ON DUPLICATE KEY UPDATE
INSERT INTO `table_name`
(`index_field`, `other_field_1`, `other_field_2`)
VALUES
('index_value', 'insert_value', 'other_value')
ON DUPLICATE KEY UPDATE
`other_field_1` = 'update_value',
`other_field_2` = VALUES(`other_field_2`);
这将 INSERT
转换为 table_name
指定的值,但如果唯一键已经存在,它将更新 other_field_1
以获得新值。
有时,当更新重复键时,使用 VALUES()
可以方便地访问传递给 INSERT
的原始值而不是直接设置值。这样,你可以使用 INSERT
和 UPDATE
设置不同的值。参见上面的示例,其中 other_field_1
在 INSERT
上设置为 insert_value
或在 UPDATE
上设置为 update_value
,而 other_field_2
始终设置为 other_value
。
要在重复键更新(IODKU)上插入工作的关键是包含唯一键的模式,该键将发出重复冲突的信号。该唯一密钥可以是主密钥,也可以不是。它可以是单个列上的唯一键,也可以是多列(复合键)。