# REPLACE 与 IGNORE

URL: https://caijiao.org/mariadb/data/insert/replace-ignore
Source: docs/mariadb/data/insert/replace-ignore.md
Description: 本节介绍 MariaDB 中 REPLACE 和 INSERT 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`，合理处理数据冲突。
