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
相关推荐
小羊在睡觉12 分钟前
golang定时器
开发语言·后端·golang
用户214118326360223 分钟前
手把手教你在魔搭跑通 DeepSeek-OCR!光学压缩 + MoE 解码,97% 精度还省 10-20 倍 token
后端
追逐时光者27 分钟前
一个基于 .NET 开源、功能强大的分布式微服务开发框架
后端·.net
刘一说1 小时前
Spring Boot 启动慢?启动过程深度解析与优化策略
java·spring boot·后端
壹佰大多1 小时前
【spring如何扫描一个路径下被注解修饰的类】
java·后端·spring
间彧1 小时前
Java双亲委派模型的具体实现原理是什么?
后端
间彧1 小时前
Java类的加载过程
后端
DokiDoki之父1 小时前
Spring—注解开发
java·后端·spring
源力祁老师2 小时前
ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
xml·数据库·sql
提笔了无痕2 小时前
什么是Redis的缓存问题,以及如何解决
数据库·redis·后端·缓存·mybatis