不存在则插入,存在则更新或忽略
约 463 字大约 2 分钟
2025-01-31
student表
表结构
name | type | primary key | auto_increment | unique |
---|---|---|---|---|
id | int | true | true | |
name | varchar | true | ||
age | int |
sql语句
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL UNIQUE,
age INT DEFAULT 18
)
不存在则插入,存在则更新
on duplicate key update
如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则执行UPDATE语句
提示
- 插入影响1行,更新影响2行,存在且更新前后值一样影响0行。
- 无论是否更新,都会导致AUTO_INCREMENT增加1
例
INSERT INTO student (name, age)
VALUES ('zhangsan', 10)
ON DUPLICATE KEY UPDATE `age` = 15;
首次执行结果(不会冲突/重复)
Affected rows: 1
id | name | age |
---|---|---|
1 | zhangsan | 10 |
第二次执行(冲突/重复) Affected rows: 2
id | name | age |
---|---|---|
1 | zhangsan | 15 |
replace into
如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则先删除旧数据再插入最新的数据
提示
- 插入影响1行,更新影响2行,存在且更新前后值一样影响2行。
- 更新会导致ID更新
例
REPLACE INTO student (name, age) VALUES ('zhangsan', 18);
首次执行结果(不会冲突/重复)
Affected rows: 1
id | name | age |
---|---|---|
1 | zhangsan | 18 |
第二次执行(冲突/重复) Affected rows: 2
id | name | age |
---|---|---|
2 | zhangsan | 18 |
避免重复插入
insert ignore into
如果插入的数据会导致UNIQUE索引或PRIMARY KEY发生冲突/重复,则忽略此次操作/不插入数据
提示
- 插入影响1行,忽略影响0行
- 无论是否插入,都会导致AUTO_INCREMENT增加1
例
INSERT IGNORE INTO student (name, age) VALUES ('zhangsan', 18);
首次执行结果(不会冲突/重复)
Affected rows: 1
id | name | age |
---|---|---|
1 | zhangsan | 18 |
第二次执行(冲突/重复) Affected rows: 0
id | name | age |
---|---|---|
1 | zhangsan | 18 |