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)上插入工作的關鍵是包含唯一鍵的模式,該鍵將發出重複衝突的訊號。該唯一金鑰可以是主金鑰,也可以不是。它可以是單個列上的唯一鍵,也可以是多列(複合鍵)。