教程 mariadb tutorial

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,合理处理数据冲突。