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 的原始值而不是直接设置值。这样,你可以使用 INSERTUPDATE 设置不同的值。参见上面的示例,其中 other_field_1INSERT 上设置为 insert_value 或在 UPDATE 上设置为 update_value,而 other_field_2 始终设置为 other_value

要在重复键更新(IODKU)上插入工作的关键是包含唯一键的模式,该键将发出重复冲突的信号。该唯一密钥可以是主密钥,也可以不是。它可以是单个列上的唯一键,也可以是多列(复合键)。