1.REPLACE
刪除更新:要求存在唯一索引,主鍵等唯一標識,流程是先刪除再插入,所以永遠可以保證最新。使用REPLACE的最大好處就是可以將DELETE和INSERT合二爲一,形成一個原子操作。如果行作爲新記錄被insert,則受影響行的值爲1;如果原有的記錄被更新,則受影響行的值爲2。
-- 刪除更新
REPLACE INTO golf_game_plan ( create_time, modify_time, user_id, plan_date )
VALUES
( now( ), now( ), 11363, '2019-09-13 00:00:00' );
2.ON DUPLICATE KEY UPDATE
要求存在唯一索引,主鍵等唯一標識,根據表中唯一索引判斷,如下所示user_id字段就添加了唯一索引。如果行作爲新記錄被insert,則受影響行的值爲1;如果原有的記錄被更新,則受影響行的值爲2。
-- 唯一索引更新
INSERT INTO golf_game_plan ( create_time, modify_time, user_id, plan_date )
VALUES
( now( ), now( ), 11363, '2019-09-13 00:00:00' )
ON DUPLICATE KEY UPDATE plan_date = '2019-12-22 00:00:00', modify_time = now();
3.EXISTS
通過exists語法更新,判斷是否存在記錄,來決定插入或刪除
INSERT INTO golf_game_plan ( create_time, modify_time, user_id, plan_date ) SELECT
now( ), now( ), 11369, '2019-09-13 00:00:00'
FROM
DUAL
WHERE
NOT EXISTS ( SELECT * FROM golf_game_plan WHERE id = 37 );
4.IGNORE
要求存在唯一索引,主鍵等唯一標識。流程是先刪除再插入。
INSERT IGNORE INTO golf_game_plan ( create_time, modify_time, user_id, plan_date )
VALUES
( now( ), now( ), 11369, '2019-09-13 00:00:00' );