MySQL中的insert ignore into 和 insert into 使用方式

最近看一个中间件源码中使用到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
相关推荐
WeiLai11121 小时前
面试基础--Redis 缓存穿透、缓存击穿、缓存雪崩深度解析
java·redis·分布式·后端·缓存·面试·架构
shyの同学1 小时前
分布式ID生成方案:数据库号段、Redis与第三方开源实现
redis·分布式·mysql·id
酒酿祺子4 小时前
蓝队第三次
sql
cg50174 小时前
MySQL数据库复杂的增删改查操作
数据库·mysql
╰つ゛木槿5 小时前
Spring Boot 调用DeepSeek API的详细教程
java·spring boot·后端·deepseek
movee6 小时前
一台低配云主机也能轻松愉快地玩RDMA
linux·人工智能·后端
程序员清风8 小时前
什么时候会考虑用联合索引?如果只有一个条件查就没有建联合索引的必要了么?
java·后端·面试
Seven978 小时前
【设计模式】掌握建造者模式:如何优雅地解决复杂对象创建难题?
java·后端·设计模式
子洋8 小时前
AnythingLLM + SearXNG 实现私有搜索引擎代理
前端·人工智能·后端
我想吃烤肉肉8 小时前
leetcode-sql数据库面试题冲刺(高频SQL五十题)
数据库·sql·leetcode