网络编程
位置:首页>> 网络编程>> 数据库>> MYSQL插入处理重复键值的几种方法

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

  发布时间:2024-01-22 05:41:28 

标签: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)

0
投稿

猜你喜欢

  • 示例1:文件打包,上传与校验我们时常做一些文件包分发的工作,实施步骤一般是先压缩打包,在批量上传至目标服务器,最后做一致性校验,本案例通过p
  • tensorflow里面提供了实现图像进行裁剪和填充的函数,就是tf.image.resize_image_with_crop_or_pad
  • 什么是固件Fixture 翻译成中文即是固件的意思。它其实就是一些函数,会在执行测试方法/测试函数之前(或之后)加载运行它们,常见的如接口用
  • 刚接触python不久,编程也是三脚猫,所以对常用的这几个工具还没有一个好的使用习惯,毕竟程序语言是头顺毛驴。所以最近在工作中使用的时候在使
  • 前言本人曾对 Vuex 作过详细介绍,但是今天去回顾的时候发现文章思路有些繁琐,不容易找到重点。于是,在下班前几分钟,我对其重新梳理了一遍。
  • 朴素贝叶斯算法简单高效,在处理分类问题上,是应该首先考虑的方法之一。通过本教程,你将学到朴素贝叶斯算法的原理和Python版本的逐步实现。更
  • python编写的语音天气预报本系统主要包括四个函数:1、获取天气数据1、输入要查询天气的城市2、利用urllib模块向中华万年历天气api
  • 写在最前面:这个我打算分几次写,由于我们通过selenium拿到的图片会很模糊,所以使用Tesseract识别之前要对图片先进行处理。第一步
  • 前言:在日常开发的过程中,有时候会临时用到一些简单的函数,她们的业务逻辑会相对简单,简单到并不值得让他们留下名字,这个时候,就很值得使用匿名
  • 1.CNN概述CNN的整体思想,就是对图片进行下采样,让一个函数只学一个图的一部分,这样便得到少但是更有效的特征,最后通过全连接神经网络对结
  • 序列化把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serializa
  • 在做项目的时候因为数据比较多,一次性全部渲染的话会花费较多的时间,所以,想到每一次渲染10条数据也想过每一次获取十条数据然后显示就行了,就目
  • 以下是涉及到插入表格的查询的5种改进方法:1)使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍。2)使用带有多个
  • 导语暗恋让人受尽委屈!一开始,你是我的秘密,我怕你知道,又怕你不知道,又怕你知道装作不知道!这大概就是暗恋的感受吧,可若是双向奔赴,那简更是
  • 不论什么语言,我们都需要注意性能优化问题,提高执行效率。选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足
  • 第一种方案、最简单、普通的方法:SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TO
  • 本文实例讲述了Python strip()函数的正则表达式实现方法。分享给大家供大家参考,具体如下:题目如下:写一个函数,它接受一个字符串,
  • 打开VB6,新建ActiveX DLL 2、在工程引用中加入Microsoft Active Server Pages Object Lib
  • 在python中,它也有这个含义,不过有点区别的是,“当...时候”这个条件成立在一段范围或者时间间隔内,从而在这段时间间隔内让python
  • 研究网页编码很长时间了,因为最近要设计一个友情链接检测的VBS脚本,而与你链接的人的页面很可能是各种编码,以前采取的方法是:如果用GB231
手机版 网络编程 asp之家 www.aspxhome.com