当unique列在一个UNIQUE键上插入包含重复值的记录时,默认insert的时候会报1062错误,MYSQL有三种不同的处理方法,本篇经验将和大家分别介绍,希望对大家的工作和学习有所帮助!
准备工作-建表
1、先建立2个测试表,在id列上创建unique约束。
2、mysql> create table test1(id int,name varchar(5),type int,primary key(id));Query OK, 0 rows affected (0.01 sec)并插入几条数据,如下图所示:
3、mysql> create table test2(id int,name varchar(5),type int,primary key(id));Query OK, 0 rows affected (0.01 sec)并插入几条数据,如下图所示:
使用 REPLACE INTO
1、发现重复的先删除再插入,如果记录有多个字段,在插入的时候如果有的字段没有赋值,那么新插入的记录这些字段为空,如下图所示:mysql> replace into test1(id,name)(select id,name from test2);Query OK, 5 rows affected (0.04 sec)Records: 4 Duplicates: 1 Warnings: 0
2、需要注意的是,当你replace的时候,如果被插入的表如果没有指定列,会用NULL表示,而不是这个表原来的内容。如果插入的内容列和被插入的表列一样,则不会出现NULL,如下图所示:mysql> replace into test1(id,name,type)(select id,name,type from test2);Query OK, 8 rows affected (0.04 sec)Records: 4 Duplicates: 4 Warnings: 0
使用INSERT INTO ON DUPLICATE KEY UPDATE
1、发现飒劐土懿重复的是更新操作。在原有记录基础上,更新指定字段内容,其它字段内容保留。例如我只想插入test2表的id,name字段,但是要保留test1表的type栓疠瑕愤字段,如下图所示:mysql> insert into test1(id,name,type)(select id,name,type from test2) on DUPLICATE KEY UPDATE test1.name=test2.name;Query OK, 5 rows affected (0.04 sec)Records: 4 Duplicates: 1 Warnings: 0
使用IGNORE INTO
1、判断是否存在,存在不插入,否则插入。很容易理解,当插入的时候,违反唯一性约束,MySQL不会尝试去执行这条语句,如下图所示:mysql> insert ignore into test1(id,name,type)(select id,name,type from test2);Query OK, 3 rows affected (0.01 sec)Records: 4 Duplicates: 1 Warnings: 0