MySQL 批量插入:如何不插入重复数据?
以下文章来源方志朋的博客,回复”666“获面试宝典
知识这个东西,看来真的要温故而知新,一直不用,都要忘记了????
业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入
那么问题来了,是不是每次插入之前都要查一遍,看看重不重复,在代码里筛选一下数据,重复的就过滤掉呢?
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率
看来这个问题不止我一个人苦恼过。
解决的办法有很多种,不同的场景解决方案也不一样,数据量很小的情况下,怎么搞都行,但是数据量很大的时候,这就不是一个简单的问题了。
几百万的数据,不可能查出来,做去重处理
说一下我Google到的解决方案????
1、insert ignore into
当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。例如:
INSERT IGNORE INTO user (name) VALUES ('telami')
这种方法很简便,但是有一种可能,就是插入不是因为重复数据报错,而是因为其他原因报错的,也同样被忽略了~
2、on duplicate key update
当primary或者unique重复时,则执行update语句,如update后为无用语句,如id=id,则同1功能相同,但错误不会被忽略掉。
例如,为了实现name重复的数据插入不报错,可使用一下语句:
INSERT INTO user (name) VALUES ('telami') ON duplicate KEY UPDATE id = id
这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束(在你的业务中那个要作为唯一的判断就将那个字段设置为唯一约束也就是unique key)。
3、insert … select … where not exist
根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。例如:
INSERT INTO user (name) SELECT 'telami' FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1)
这种方法其实就是使用了mysql的一个临时表的方式,但是里面使用到了子查询,效率也会有一点点影响,如果能使用上面的就不使用这个。
4、replace into
如果存在primary or unique相同的记录,则先删除掉。再插入新记录。
REPLACE INTO user SELECT 1, 'telami' FROM books
这种方法就是不管原来有没有相同的记录,都会先删除掉然后再插入。
实践
选择的是第二种方式
<insert id="batchSaveUser" parameterType="list">insert into user (id,username,mobile_number)values<foreach collection="list" item="item" index="index" separator=",">(
#{item.id},
#{item.username},
#{item.mobileNumber}
)
</foreach>
ON duplicate KEY UPDATE id = id </insert>
这里用的是Mybatis,批量插入的一个操作,mobile_number 已经加了唯一约束。这样在批量插入时,如果存在手机号相同的话,是不会再插入了的。
来源:www.telami.cn
热门内容:万万没想到!logger.info() 还能导致线上故障?IntelliJ IDEA官方宣布中文汉化包正式发布低代码 yyds再见Spring!下一个开源框架更香!
Spring发布新成员:Spring GraphQL!高调出场的GraphQL能火起来了吗?
很哇塞的Java系列实战项目!最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
MySQL 批量插入:如何不插入重复数据?相关推荐
- 向Mysql批量插入50万条数据
>批量插入数据脚本 表Sql: CREATE TABLE dept( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, deptno MEDIUMINT U ...
- mysql批量插入亿级别的数据
哪些情况会影响数据插入的效率 1.单次客户端与服务端之间的通信 2. mysql对主键.唯一索引.外键的校验 3. 事务检查 4. 单线程处理业务并封装sql数据(比较耗时) 针对以上情况解决方案 1 ...
- Mysql批量插入数据问题解决和优化
Mysql批量插入数据问题解决和优化 一.问题描述 项目中mysql批量插入大概50000左右数据,使用事务和批量,但是速度依旧很慢,大约60s左右,迫切希望改进这个问题. 二.问题原因 尽管是批量a ...
- Mysql 批量插入大量数据的两种方案以及优缺点(分别是 5W 条数据和 10W 条数据)
Mysql 批量插入(5W 条数据和 10W 条数据) 1.批量插入思路 一般是有两种不同的思路: 1.for 循环批量插入 2.生成一条 SQL 语句,比如 insert into user(id, ...
- 教你急速快速批量插入1000万条数据到mysql数据库表面试题
急速快速批量插入1000万条数据到mysql数据库表面试题 教你急速快速批量插入1000万条数据到mysql数据库表&面试题 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好 ...
- MySQL批量插入1000w条数据
一.概述 在一些实际的测试.运维过程中,往往需要向数据库插入大量数据,利用存储过程是一个不错的选择 本次采用MySQL5.7,模拟实际批量插入1000w条随机数据 二.创建库 mysql -uroot ...
- mysql批量插入数据的函数和存储过程
-- 创建函数前,设置 set global log_bin_trust_function_creators=TRUE; -- 新建函数-产生随机的字符串 drop function if exist ...
- MYSQL批量插入数据库实现语句性能分析
MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下 CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( ...
- mysql批量插入 增加参数_MySql 的批量操作,要加rewriteBatchedStatements参数
MySql 的批量操作,要加rewriteBatchedStatements参数 作者:赵磊 博客:http://elf8848.iteye.com ------------------------- ...
- mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...
利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...
最新文章
- 内嵌资源html,内嵌元素(HTML)
- Windows 8下看漫画的程序发布
- Shell编程进阶篇(完结)
- SQL-left(right,inner) join
- 编程能力强化(4)——模拟SQL语句解析
- 14种方法助你参与开源项目
- 如何监测服务器网络稳定性centos,centos下网络监测工具nethogs
- Unix 网络编程 读书笔记1
- Debian 下配置ssh
- mysql 线程内存 回收_【MySQL】InnoDB后台线程与内存缓存池
- python3 yum源_Redhat7.3更换CentOS7 yum源
- 2005-2020POI数据 高德POI数据 高德信息点数据 百度POI数据分析下载
- 电磁兼容EMC标准 CISPR 22:EN 55022
- 数学分析讲义习题解答:(二)
- 流水线、超流水线、超标量(superscalar)技术对比
- 计算机64位地址总线,地址总线与数据总线的关系,功能和宽度
- 蓝桥杯计算机软件大赛什么时间,“蓝桥杯”全国软件设计大赛
- 项目管理10大知识领域和47个过程的思维导图
- python排列3彩票统计
- win10系统用chew-wga激活重启后蓝屏