最近看一个中间件源码中使用到insert ignore into 保存数据的方式。
insert ignore into : 忽略重复的记录,直接插入数据。
包括两种场景:
1、插入的数据是主键冲突时
insert ignore into会给出warnings,show warnings就可以看到提示主键冲突;并且本次插入无效。
如果使用insert into语句时,如果主键冲突直接报错。
2、没有主键冲突时,直接插入数据
insert into 与 insert ignore into 都是直接插入数据
下面是准备测试数据:
# 准备表
create table t_user(id int primary key, name varchar(50));
# 第一次执行
insert into t_user values(1, "aaa"), (2, "bbb"), (3, "ccc");
# 执行结果
# insert into t_user values(1, "aaa"), (2, "bbb"), (3, "ccc")
#> Affected rows: 3
#> 时间: 0.01s
select * from t_user;
# 执行结果
id | name
1 aaa
2 bbb
3 ccc
# 第二次执行
insert into t_user values(1, "aaa"), (2, "bbb"), (3, "ccc");
# 执行结果
#insert into t_user values(1, "aaa"), (2, "bbb"), (3, "ccc")
#> 1062 - Duplicate entry '1' for key 't_user.PRIMARY'
#> 时间: 0s
# 第一次执行
insert ignore into t_user values(4, "aaa"), (5, "bbb"), (6, "ccc");
# 执行结果
# insert ignore into t_user values(4, "aaa"), (5, "bbb"), (6, "ccc")
# > Affected rows: 3
# > 时间: 0.01s
select * from t_user;
# 执行结果
id | name
1 aaa
2 bbb
3 ccc
4 aaa
5 bbb
6 ccc
# 第二 次执行
insert ignore into t_user values(4, "aaa"), (5, "bbb"), (6, "ccc");
# 执行结果
# insert ignore into t_user values(4, "aaa"), (5, "bbb"), (6, "ccc")
# > Affected rows: 0
# > 时间: 0s