≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > MySQL

MySQL插入处理重复键值的几种方法

人气:341 时间:2020-07-09

这篇文章主要为大家详细介绍了MySQL插入处理重复键值的几种方法,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编小韵来看看吧!

先建立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)
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的时候,需要保留被插入表的列,只更新指定列,那么就可以使用第二种方法。
2、INSERT INTO ON DUPLICATE KEY UPDATE
发现重复的是更新操作。在原有记录基础上,更新指定字段内容,其它字段内容保留。例如我只想插入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
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,name,type)(select id,name,type from test2);
Query OK, 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)

本文来自:http://www.q1010.com/177/10172-0.html

注:关于MySQL插入处理重复键值的几种方法的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:MYSQL

您可能感兴趣的文章

  • MySQL删除数据Delete与Truncate语句使用比较
  • MySQL触发器学习总结
  • 关于MySQL的优化全面分析
  • 还原大备份MySQL文件失败的解决方法分享
  • MySQL复制中临时表的运用技巧
  • MyISAM和InnoDB引擎优化分析
  • MySQL 修改用户密码图文介绍
  • Window系统下自动备份MySQL数据库方法
  • MySQL如何导入csv格式数据文件解决方案
  • MySQL error 1130 hy000:Host'localhost'解决方案
上一篇:MySQL官方手册学习笔记1 MySQL简单上手
下一篇:MySQL删除数据Delete与Truncate语句使用比较
热门文章
  • mysql 修改character_set_server为utf-8的简单示例
  • 解决MySQL丢失文件localhost.localdomain.pid、mysql.sock的示例
  • MySQL 数据类型binary和varbinary的简单示例
  • MySQL:reading initial communication packet问题解决方法
  • MySql 表类型MYISAM、InnoDB区别
  • bash: mysql: command not found 的解决方法
  • MYSQL默认用户名ROOT修改方法
  • MySQL 常用命令菜鸟教程
  • MySQL 使用命令行新建用户并授予权限
  • MySql 数据库物理文件存放位置查看示例
  • 最新文章
    • MySQL查看死锁与解除死锁的简单示例
    • MySQL 慢查询的功能实例
    • MySQL查看死锁与去除死锁的简单示例
    • MySQL找出未提交事务的SQL的简单示例
    • MySQL锁阻塞的的简单示例
    • MySQL中的binary类型使用操作的示例
    • SQL优化教程之in与range查询的简单示例
    • MySQL 的 21 个规范、优化最佳实践!
    • MySQL 字符类型大小写敏感的简单示例
    • 解决mybatis-plus分页传入参数后sql where条件没有limit分页信息的问题

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。