Sql批量插入时如果遇到相同的数据怎么处理
测试数据
-- 创建测试表1
CREATE TABLE `testtable1` (
`Id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`UserId` INT(11) DEFAULT NULL,
`UserName` VARCHAR(10) DEFAULT NULL,
`UserType` INT(11) DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `IX_UserId` (`UserId`)
) ENGINE=INNODB DEFAULT CHARSET=utf8; -- 创建测试表2
CREATE TABLE `testtable2` (
`Id` INT(11) NULL AUTO_INCREMENT,
`UserId` INT(11) DEFAULT NULL,
`UserName` VARCHAR(10) DEFAULT NULL,
`UserType` INT(11) DEFAULT NULL,
PRIMARY KEY (`Id`),
UNIQUE KEY `IX_UserId` (`UserId`)
) ENGINE=INNODB DEFAULT CHARSET=utf8; -- 插入测试数据1
INSERT INTO testtable1(Id,UserId,UserName,UserType)
VALUES(1,101,'aa',1),(2,102,'bbb',2),(3,103,'ccc',3); -- 插入测试数据2
INSERT INTO testtable2(Id,UserId,UserName,UserType)
VALUES(1,201,'aaa',1),(2,202,'bbb',2),(3,203,'ccc',3),(4,101,'xxxx',5);
可以看到上边的数据中会有userid为重复的数据 userid=101
mysql> show tables;
+---------------+
| Tables_in_dev |
+---------------+
| testtable1 |
| testtable2 |
+---------------+
mysql> select * from testtable1;
+----+--------+----------+----------+
| Id | UserId | UserName | UserType |
+----+--------+----------+----------+
| 1 | 101 | aa | 1 |
| 2 | 102 | bbb | 2 |
| 3 | 103 | ccc | 3 |
+----+--------+----------+----------+
3 rows in set (0.04 sec)mysql> select * from testtable2;
+----+--------+----------+----------+
| Id | UserId | UserName | UserType |
+----+--------+----------+----------+
| 1 | 201 | aaa | 1 |
| 2 | 202 | bbb | 2 |
| 3 | 203 | ccc | 3 |
| 4 | 101 | xxxx | 5 |
+----+--------+----------+----------+
4 rows in set (0.04 sec)### 当执行以下sql时,会报1062错误,提示有重复的key
mysql> insert into testtable1 (userid,username,usertype)-> select userid,username,usertype from testtable2;
1062 - Duplicate entry '101' for key 'IX_UserId'
- 如果想让上边的sql执行成功的话,可以使用
IGNORE
关键字
mysql> insert ignore into testtable1 (userid,username,usertype)-> select userid,username,usertype from testtable2;
Query OK, 3 rows affected (0.12 sec)
Records: 4 Duplicates: 1 Warnings:1
mysql> select * from testtable1;
+----+--------+----------+----------+
| Id | UserId | UserName | UserType |
+----+--------+----------+----------+
| 1 | 101 | aa | 1 |
| 2 | 102 | bbb | 2 |
| 3 | 103 | ccc | 3 |
| 11 | 201 | aaa | 1 |
| 12 | 202 | bbb | 2 |
| 13 | 203 | ccc | 3 |
+----+--------+----------+----------+
6 rows in set (0.05 sec)
查询sql,显示testtable2表中的数据插入到了表1中(除了重复key的那条信息)
另外注意到主键id为11,12,13开始的,这个是因为之前insert的sql失败导致的自增主键不连续
导入并覆盖重复数据,REPLACE INTO
上边那个是没有插入重复key的数据
回滚之前testtable1表的数据
mysql> truncate table testtable1; Query OK, 0 rows affected (0.62 sec)mysql> select * from testtable1; Empty set mysql> -- 插入测试数据1 INSERT INTO testtable1(Id,UserId,UserName,UserType) VALUES(1,101,'aa',1),(2,102,'bbb',2),(3,103,'ccc',3); Query OK, 3 rows affected (0.09 sec)
mysql> replace into testtable1 (userid,username,usertype)-> select userid,username,usertype from testtable2; Query OK, 5 rows affected (0.10 sec) Records: 4 Duplicates: 1 Warnings: 0 mysql> select * from testtable1; +----+--------+----------+----------+ | Id | UserId | UserName | UserType | +----+--------+----------+----------+ | 2 | 102 | bbb | 2 | | 3 | 103 | ccc | 3 | | 4 | 201 | aaa | 1 | | 5 | 202 | bbb | 2 | | 6 | 203 | ccc | 3 | | 7 | 101 | xxxx | 5 | +----+--------+----------+----------+
可以看到表1中的101的username被覆盖为表2中的数据,这个是因为replace是现将原来表一中重复的数据删除掉,然后再执行插入新的数据
导入重复数据,保留未指定的值
mysql> insert into testtable1 (userid,username,usertype) -> select userid,username,usertype from testtable2-> on duplicate key update-> testtable1.username = testtable2.username;
以上sql对于重复的数据,只是将username进行了覆盖,其他的值还是表一中的数据
Sql批量插入时如果遇到相同的数据怎么处理相关推荐
- sql批量插入防止重复插入_使用SQL批量插入锁定配置
sql批量插入防止重复插入 One challenge we may face when using SQL bulk insert is whether we want to allow acces ...
- sql 一次性批量插入_考虑使用SQL批量插入的安全性
sql 一次性批量插入 In this article, we'll discuss security implications of using SQL Bulk Insert and how to ...
- sql批量插入防止重复插入_使用具有严格业务规则SQL批量插入
sql批量插入防止重复插入 This article will cover SQL bulk insert operations deterministic outcomes and response ...
- 动态sql批量插入数据
核心逻辑即为mysql批量插入数据 1 动态sql批量插入单表 mapper层 集合入参 入参字段符合动态sql字段 void updateBatchRefresh(List<WccsInfoP ...
- ### jdbc 向数据库插入特殊字符 失败。SQL报错的问题。【批量插入时手动解决特殊字符,根本不现实!!】
==== 不禁感叹:框架就是框架!!!不需要再手动处理很多业务以外的 各种繁琐处理. [这也是为什么 生产环境 基本只使用 框架的原因!] ===批量插入SQL如何写的[重点!] 版本1: [old] ...
- MySQL + MyBatis 批量插入时存在则忽略或更新记录
一.存在时则忽略 为什么在发现重复时会忽略?这里面涉及到两个地方. 1.重复则忽略.那么首先是需要判断是否重复,这里是通过唯一索引判断是否重复的.如果表中唯一索引的字段已经存在与将要插入的记录行中唯一 ...
- sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
假定我们的表结构如下: CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCH ...
- java 原生sql批量插入,Java对象集合转MySQL批量插入语句
Mybatis的批量插入确实很好用,但是当数据量特别大的时候可能一次批量插入2000条数据就死翘翘了.怎么办呢?当然是原生sql是最快的啦,10000条数据秒入无压力.下面是将对象集合拼接成批量插入M ...
- mysql中sql批量插入_MySQL批量SQL插入性能优化
对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长. 特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意义的 ...
最新文章
- 软件工程 - 设计模式学习之工厂方法模式Factory Method
- 我画了35张图,就是为了让你深入 AQS!
- aws dynamodb_如何使用AWS Lambda将DynamoDB集成到您的API中
- python frombuffer_numpy.getbuffer和numpy.frombu
- PHP生成url的函数,U函数:URL地址生成
- 如何新建Outlook电子邮件规则实现邮件自动分类
- 2015 年最流行的 10 个 Linux 发行版
- 【图像去噪】基于matlab GUI中值+均值+维纳+小波滤波图像去噪【含Matlab源码 753期】
- 【车间调度】基于matlab免疫遗传算法求解多目标生产调度问题【含Matlab源码 710期】
- 2022张宇考研基础30讲 第九讲 一元函数积分学的几何应用
- python处理pdf 层_Python处理PDF及生成多层PDF
- mysql创建表插入随机数_插入随机数到MySQL数据库
- 坚持住啊,还在代码屎山中爬行的同事们
- MacBook Pro 2018款充电口不能用解决办法
- 如何将PlayStation 4恢复出厂设置
- Android获取OAID
- postman双击打不开的解决方案
- 直播短视频带货完美运营APP源码 购物直播交友系统源码
- 光场相机重聚焦原理介绍及代码解析
- 心态很容易受别人影响_很容易被别人说的话影响心情,应该怎么办?
热门文章
- gradient设置上下渐变_css3渐变之线性渐变linear-gradient
- python 两个乘号是什么_(2)Python 变量和运算符
- rabbitmq连接java快速入门
- pd快充线无法连接计算机,华为快充连接扩展坞再接计算机,无法正常充电
- js读取div从html中导入,在html中div+css布局的简单应用...-js+div+css下拉导航菜单完整代...-CSS文件的条件导入 - Gene Li_169IT.COM...
- python列表生成多个号码_python按需生成固定数量电话号码并保存为excel(不重复)...
- 【Mybatis】sqlSessionTemplate.getConnection() 遇到 java.sql.SQLException: Connection is closed
- 【spring-boot】启用数据缓存功能
- 有微型计算机广告,广告还会受欢迎?都是斯巴达克显卡惹的“祸”
- findviewbyid找不到id_上班找车位很难吧?看看这波操作……