主题
REPLACE 与 IGNORE
1. INSERT IGNORE
- 当插入数据导致主键或唯一索引冲突时,忽略该条插入,继续执行其他记录插入。
- 不会报错,冲突记录不会插入,也不会更新。
示例:
sql
INSERT IGNORE INTO users (id, username) VALUES (1, 'alice');
如果 id=1 已存在,该条记录将被跳过。
2. REPLACE
- 先尝试插入记录。
- 如果主键或唯一索引冲突,则先删除旧记录,再插入新记录。
- 相当于先删除后插入,可能导致触发器执行和自增 ID 变化。
示例:
sql
REPLACE INTO users (id, username) VALUES (1, 'alice');
如果 id=1 已存在,先删除旧记录,再插入新记录。
3. 主要区别
特性 | INSERT IGNORE | REPLACE |
---|---|---|
发生冲突时行为 | 忽略插入,不报错 | 删除旧记录,插入新记录 |
触发器影响 | 不触发删除触发器 | 触发删除和插入触发器 |
影响自增字段 | 无 | 可能重新分配自增值 |
使用场景 | 忽略重复,保持原数据 | 替换旧数据,更新记录 |
根据需求选择使用 INSERT IGNORE
或 REPLACE
,合理处理数据冲突。