あなたはどのように処理し、同じデータが発生した場合は、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); 

データは重複データのユーザーIDユーザーID = 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、(情報の重複キー部分を除く)を表1に表に挿入された表示データtesttable2

また11、12に主キーidが開始することに注意してください、これは、SQLのINSERTに失敗する前に起因する自動インクリメントの主キー不連続にあります


INTO REPLACE、重複データをインポートおよび上書き

何も挿入重複キーデータが存在しないことの上

  • データ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 | +----+--------+----------+----------+ 

    これは今、元のテーブルを交換しているため、ユーザー名は、表2のデータで覆われている101に表1に見ることができ、重複データが削除され、その後、新しいデータの挿入

    指定されていないインポート重複データ保持値

    mysql> insert into testtable1 (userid,username,usertype) 
        -> select userid,username,usertype from testtable2
        -> on duplicate key update -> testtable1.username = testtable2.username; 

    テーブルデータのその上書きユーザー名、または他の値を除いて上記のデータを複製するSQL

おすすめ

転載: www.cnblogs.com/nxzblogs/p/11800796.html