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
相关推荐
NuageL10 分钟前
SpringBoot使用@Scheduled注解实现定时任务
java·spring boot·后端
heze0911 分钟前
sqli-labs-Less-23
数据库·mysql·网络安全
短剑重铸之日21 分钟前
《SpringCloud实用版》完整技术选型地图
java·后端·spring·spring cloud
咚为42 分钟前
Rust 错误处理的工程化演进:从 Result 到系统级边界设计
开发语言·后端·rust
南山乐只43 分钟前
Qwen Code + OpenSpec 实战指南:AI 驱动开发的从安装到落地
java·人工智能·后端
独自破碎E1 小时前
MySQL是怎么实现事务的?
数据库·mysql
拽着尾巴的鱼儿1 小时前
Spring定时任务 Scheduled使用
java·后端·spring
卜锦元1 小时前
Docker Compose 部署 MySQL 8.4 LTS(生产级实践方案)
数据库·mysql·docker·容器
贾修行1 小时前
IIS 作为反向代理:为 ASP.NET Core Kestrel 应用保驾护航
后端·iis·asp.net·反向代理·arr·url 重写规则
Smile_微笑2 小时前
恢复 MySQL 服务(Docker 环境专用)
mysql·adb·docker