REPLACE 与幂等写入要点
- REPLACE 先按唯一键删旧行再插新行,自增 id 会变
- ON DUPLICATE KEY UPDATE 命中则改、未命中则插
- 后者不删除原行,自增 id 与触发器都更可控
- 幂等写入常用后者,重复提交也不会多插数据
- REPLACE 会触发删除再插入,外键关联要当心
- 选择依据:要不要保留原行的其他列与 id
REPLACE 与幂等写入示例
INSERT INTO user (id, nickname, score)
VALUES (1001, '小明', 50)
ON DUPLICATE KEY UPDATE nickname = '小明', score = 50;
-- REPLACE 命中唯一键时整行替换
REPLACE INTO config (key_name, val) VALUES ('switch', 'on');
避坑提醒:优先用 ON DUPLICATE KEY UPDATE 而不是 REPLACE,前者只更新指定列、不动自增 id,对关联数据和统计更友好。