《MysqL教程MysqL插入处理重复键值的几种方法》要点:
本文介绍了MysqL教程MysqL插入处理重复键值的几种方法,希望对您有用。如果有疑问,可以联系我们。
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,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)
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,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的时候,需要保留被插入表的列,只更新指定列,那么就可以使用第二种方法.
2、INSERT INTO ON DUPliCATE KEY UPDATE
发现重复的是更新 *** 作.在原有记录基础上,更新指定字段内容,其它字段内容保留.例如我只想插入test2表的ID,name字段,但是要保留test1表的type字段:
MysqL> insert into test1(ID,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
MysqL> select * from test1;
+-----+------+------+
| ID | name | type |
+-----+------+------+
| 101 | xxx | 1 |
| 102 | bbb | 2 |
| 103 | ccc | 3 |
| 203 | ccc | 3 |
| 202 | bbb | 2 |
| 201 | aaa | 1 |
+-----+------+------+
6 rows in set (0.00 sec)
如果INSERT的时候,只想插入原表没有的数据,那么可以使用第三种方法.
3、IGnorE INTO
判断是否存在,存在不插入,否则插入.很容易理解,当插入的时候,违反唯一性约束,MysqL不会尝试去执行这条语句.例如:
MysqL> insert ignore into test1(ID,3 rows affected (0.01 sec)
Records: 4 Duplicates: 1 Warnings: 0
MysqL> select * from test1;
+-----+------+------+
| ID | name | type |
+-----+------+------+
| 101 | aaa | 1 |
| 102 | bbb | 2 |
| 103 | ccc | 3 |
| 203 | ccc | 3 |
| 202 | bbb | 2 |
| 201 | aaa | 1 |
+-----+------+------+
6 rows in set (0.00 sec) 总结
以上是内存溢出为你收集整理的MYSQL教程MYSQL插入处理重复键值的几种方法全部内容,希望文章能够帮你解决MYSQL教程MYSQL插入处理重复键值的几种方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)