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
相关推荐
古月居GYH2 小时前
【数据分析】如何在PyCharm中高效配置和使用SQL
ide·sql·pycharm
程序员岳焱6 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
麦兜*6 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
大只鹅7 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
ai小鬼头7 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
梦在深巷、7 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT_10247 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
bobz9658 小时前
动态规划
后端
stark张宇8 小时前
VMware 虚拟机装 Linux Centos 7.9 保姆级教程(附资源包)
linux·后端
Johny_Zhao8 小时前
Ubuntu系统安装部署Pandawiki智能知识库
linux·mysql·网络安全·信息安全·云计算·shell·yum源·系统运维·itsm·pandawiki