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' );
