テストデータ
-- 创建测试表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