我们大家都知道当unique列在一个UNIQUE键上需要插入包含重复值的记录的时候,其默认insert的时候有时报错误,MySQL插入处理重复键值的2种不同的处理方法,下面我们对其进行分别介绍。
公司主营业务:成都网站制作、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出昌邑免费做网站回馈大家。
先建立2个测试表,在id列上创建unique约束。
- MySQL> create table test1(id int,name varchar(5),type int,primary key(id));
- Query OK, 0 rows affected (0.01 sec)
- MySQL> create table test2(id int,name varchar(5),type int,primary key(id));
- Query OK, 0 rows affected (0.01 sec)
- MySQL> select * from test1;
- +-----+------+------+
- | id | name | type |
- +-----+------+------+
- | 101 | aaa | 1 |
- | 102 | bbb | 2 |
- | 103 | ccc | 3 |
- +-----+------+------+
- 3 rows in set (0.00 sec)
- MySQL> select * from test2;
- +-----+------+------+
- | id | name | type |
- +-----+------+------+
- | 201 | aaa | 1 |
- | 202 | bbb | 2 |
- | 203 | ccc | 3 |
- | 101 | xxx | 5 |
- +-----+------+------+
- 4 rows in set (0.00 sec)
MySQL插入处理重复键值方法1、REPLACE INTO
发现重复的先删除再插入,如果记录有多个字段,在插入的时候如果有的字段没有赋值,那么新插入的记录这些字段为空。
- 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
- MySQL> select * from test1;
- +-----+------+------+
- | id | name | type |
- +-----+------+------+
- | 101 | xxx | NULL |
- | 102 | bbb | 2 |
- | 103 | ccc | 3 |
- | 201 | aaa | NULL |
- | 202 | bbb | NULL |
- | 203 | ccc | NULL |
- +-----+------+------+
- 6 rows in set (0.00 sec)
需要注意的是,当你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
- MySQL> select * from test1;
- +-----+------+------+
- | id | name | type |
- +-----+------+------+
- | 101 | xxx | 5 |
- | 102 | bbb | 2 |
- | 103 | ccc | 3 |
- | 201 | aaa | 1 |
- | 202 | bbb | 2 |
- | 203 | ccc | 3 |
- +-----+------+------+
- 6 rows in set (0.00 sec)
如果INSERT的时候,需要保留被插入表的列,只更新指定列,那么就可以使用第二种方法。
MySQL插入处理重复键值方法2、INSERT INTO ON DUPLICATE KEY UPDATE
发现重复的是更新操作。在原有记录基础上,更新指定字段内容,其它字段内容保留。例如我只想插入test2表的id,name字段,但是要保留test1表的type字段:
- 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
- MySQL> select * from test1;
- +-----+------+------+
- | id | name | type |
- +-----+------+------+
- | 101 | xxx | 5 |
- | 102 | bbb | 2 |
- | 103 | ccc | 3 |
- | 201 | aaa | 1 |
- | 202 | bbb | 2 |
- | 203 | ccc | 3 |
- +-----+------+------+
- 6 rows in set (0.00 sec)
如果INSERT的时候,只想插入原表没有的数据,那么可以使用其他的MySQL插入处理重复键值的方法。
【编辑推荐】
分享名称:MySQL插入处理重复键值的2种不同处理方案
本文地址:http://www.csdahua.cn/qtweb/news37/521787.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网