测试数据

-- 创建测试表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批量插入时如果遇到相同的数据怎么处理的更多相关文章

  1. SQL批量插入表类 SqlBulkInsert

    ado.net已经有了sqlBulkCopy, 但是那个用xml格式,网络传输数据量太大. 自己实现了一个,传输尽量少的字节. 性能没对比过,有需要的自己拿去测试. using System.Data ...

  2. Delphi中SQL批量插入记录

    http://www.cnblogs.com/azhqiang/p/4050331.html 在进行数据库操作时, 我们经常会遇到批量向数据库中写入记录的情况. 在这里我提供3种操作方式:   1.  ...

  3. mybatis oracle mysql 批量插入时的坑爹问题--需谨记

    mybatis oracle mysql 批量插入一.oracle的批量插入方式insert into db(id, zgbh, shbzh) select '1', '2', '3' from du ...

  4. insert into select 与select into from -- sql 批量插入

    参考资料:http://www.w3school.com.cn/sql/sql_union.asp   UNION:操作符用于合并两个或多个select语句的结果集.                 ...

  5. 使用SQL批量插入数据到数据库 以及一些SQL函数的语法

    批量插入100条记录 set nocount on declare @i int=1; while @i<=100 begin Insert into Client(id,ClientCode, ...

  6. sql批量插入缓慢

    1.有一个普通的表t_asset,只有2个字段id,ip 没有索引 2.当用insert into t_asset(id,ip) values(?,?),(?,?) 1200多条记录时,发现竟然用了3 ...

  7. Sql批量插入方法

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  8. sql 批量插入

    create  PROCEDURE insertinto as begindeclare @id int;set @id=1;while @id<10begininsert into perso ...

  9. SQL 批量插入数据

    后面进行完善修改. /*批量插入数据*/ 这个比较完善.直接插入数据库表. INSERT INTO `goods_transverter` ( `code`,`es_id`,`barcode`, `n ...

随机推荐

  1. vue2.0发布

    http://blog.csdn.net/xuefeiliuyuxiu/article/details/78970815

  2. [每日一讲] Python系列:Python概述

    Python 序章 概述 Python 是弱类型动态解释型的面向对象高级语言,其具备面向对象的三大特点:封装.继承.多态.Python 代码运行时,其有一个编译过程,通过编译器生成 .pyc 字节码 ...

  3. Mike的农场

    题目 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i]元, ...

  4. 【leetcode】1111. Maximum Nesting Depth of Two Valid Parentheses Strings

    题目如下: A string is a valid parentheses string (denoted VPS) if and only if it consists of "(&quo ...

  5. MDC到日志管理配置

    MDC是什么? 第一次接触MDC,很蒙圈.看看导入的包import org.slf4j.Logger;import org.slf4j.LoggerFactory:import org.slf4j.M ...

  6. word的公式编辑器在插入对象里面!!!!!!!!!!!!!

    word的公式编辑器在  插入->对象  里面!!!!!!!!!!!!!

  7. <知识整理>2019清北学堂提高储备D4

    今天主要讲一下数学的知识. 一.进制转换: 十进制到k进制:短除法:顺除至0,逆序取余. k进制转十进制:乘权相加. 常见进制:四进制(对应2位二进制).八进制(对应3位二进制).十六进制(对应4位二 ...

  8. A* 算法求第 K 短路

    一种具有 \(f(n)=g(n)+h(n)\) 策略的启发式算法能成为 A* 算法的充分条件是: 搜索树上存在着从起始点到终了点的最优路径. 问题域是有限的. 所有结点的子结点的搜索代价值 \(> ...

  9. SpringBoot 集成 Spring Session

    SpringBoot 集成 Spring Session 应该讲解清楚,为什么要使用 Redis 进行 Session 的管理. Session 复制又是什么概念. Spring Session 在汪 ...

  10. 按ECS退出全屏模式

    <!DOCTYPE html><html><meta http-equiv="Content-Type" content="text/htm ...