当前位置:首页 > 系统运维 > 正文内容

MySQL插入处理重复键值的2种不同处理方案

a8116255316年前 (2010-06-07)系统运维9

我们大家都知道当unique列在一个UNIQUE键上需要插入包含重复值的记录的时候,其默认insert的时候有时报错误,MySQL插入处理重复键值的2种不同的处理 *** ,下面我们对其进行分别介绍。

先建立2个测试表,在id列上创建unique约束。

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 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 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 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插入处理重复键值的 *** 。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/20928.html

分享给朋友:

“MySQL插入处理重复键值的2种不同处理方案” 的相关文章

windows 7系统如何设置休眠时不断网以便继续完成下载

windows 7系统如何设置休眠时不断网以便继续完成下载

在Windows 7系统的默认设置中,当Windows 7系统处于休眠状态时,会同时断网的。如此一来,无论你正在使用迅雷还是快车等下载工具,同样可以在休眠状态下继续完成下载,最大限度做到从身边的小事开始支持环保。下面我们就详细介绍操作步骤,帮助Windows 7系统用户实现这一节能目标。 首先需要...

windows 7系统开机提示press any key to restart的故障分析及解

windows 7系统开机提示press any key to restart的故障分析及解

Windows 7 64位系统开机后提示"press any key to restart",无法进入系统了,具体现象如下所示: 故障分析: 故障的主要原因还是硬盘的问题,可以先检查是不是接触不良或坏了,进行修复或更换即可。 解决方法: 1、开机按F8不动到高级选项出现在松手,选“...

ubuntu14.04打开个几个应用窗口最小化后怎么切换呢?

ubuntu14.04打开个几个应用窗口最小化后怎么切换呢?

ubuntu14.04应用窗口列表在哪里?在ubuntu下打开个几个应用窗口最小化后怎么切换呢,应用窗口列表在哪里呢? 1、多打开几个chrome浏览器窗口。 2、然后都做最小化处理。 3、现在我们在桌面左边的面板上找到"左右两边有小白点"的chrome浏览器应用图标,这就是chr...

windows 7如何给c盘扩容 图解windows 7 64位系统C盘扩容方法(自

windows 7如何给c盘扩容 图解windows 7 64位系统C盘扩容方法(自

用Windows 7久了,C盘越来越大,原来50G的空间基本用完了,又不想重装系统,就想着能不能直接扩容。 在网上搜了半天,看了无数教程,都写得不明不白的,结合了几篇教程才终于搞明白。 重新总结一下,方便有需要的人。 所用软件: http://www.jb51.net/softs/57895...

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

windows 7系统下Windows服务被流氓软件注册怎么办?Windows服务

解决方法: 其实处理这些使用流氓软件,需要将相关的.exe文件删除,使它不能再运行,或者直接清除这个服务本身,使计算机重启的时候,它不会再启动。比如Hijackthis扫描,在扫描日志中,一般会把非Windows系统的服务以023的方式列出来,如下面这段: O23 - ...

windows7系统下让所有文件夹都使用同一种视图的方法

windows7系统下让所有文件夹都使用同一种视图的方法

Windows 7系统可以对每个文件夹进行个性化视图设置,可以根据自己的个人喜好和实际需要更改文件或文件夹图标的大小,或者让文件或文件夹以列表、平铺等方式显示。但是,假如你对N个文件夹视图进行了风格各异的个性设置,现在又想让所有文件夹都使用同一种视图怎么办呢 手工一个一个修改,你OUT了,非累得手抽...