MySQL 处理插入重主键唯一键重复值办法

本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE;接下来就分别看看这三种方式的处理办法。

 

IGNORE

 

当使用INSERT语句向表中添加一些行数据并且在处理期间发生错误时,INSERT语句将被中止,并返回错误消息。因此,可能不会向表中没有插入任何行。

使用ignore当插入的值遇到主键(PRIMARY KEY)或者唯一键(UNIQUE KEY)重复时自动忽略重复的记录行,不影响后面的记录行的插入,

使用INSERT INGORE语句,则会忽略导致错误的行,并将其余行插入到表中。

创建测试表

CREATE  TABLE  Tignore
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT
)default charset=utf8;

正常的插入如果插入的记录中存在键重复会报错,整个语句都会执行失败

使用IGNORE如果插入的记录中存在重复值会忽略重复值的该记录行,不影响其它行的插入。

REPLACE

使用replace当插入的记录遇到主键或者唯一键重复时先删除表中重复的记录行再插入。

REPLACE   INTO Treplace() VALUES(1,1),(1,2),(2,2);

创建测试表

DROP TABLE  IF EXISTS Treplace;
CREATE  TABLE  Treplace
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT
)default charset=utf8;

 从输出的信息可以看到是4行受影响,说明它是先插入了(1,1)然后又删除了(1,1)

ON DUPLICATE KEY UPDATE

当插入的记录遇到主键或者唯一键重复时,会执行后面定义的UPDATE操作。

相当于先执行Insert 操作,再根据主键或者唯一键执行update操作。

创建测试表

DROP TABLE  IF EXISTS Tupdate;
CREATE  TABLE  Tupdate
(ID INT NOT NULL PRIMARY KEY ,
NAME1 INT UNIQUE KEY
)default charset=utf8;
INSERT INTO Tupdate() VALUES(1,1),(1,2) ON DUPLICATE KEY UPDATE NAME1=NAME1+1;
INSERT INTO Tupdate() VALUES(1,1),(1,2) ON DUPLICATE KEY UPDATE NAME1=VALUES(NAME1)+1;

第一条语句相当于执行:

INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=NAME1+1
WHERE ID=1;

第二条语句相当于执行:

INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=2+1
WHERE ID=1;

在ON DUPLICATE KEY UPDATE后面使用VALUES指的就是插入的记录的值,而不使用VALUES指的是表的自身值。

 

注意: ON DUPLICATE KEY UPDATE的后面执行的UPDATE更新的记录是WHERE重复的主键或者唯一键的ID,这点非常重要。

比如下面这种情况:

INSERT INTO Tupdate() VALUES(1,1),(2,1) ON DUPLICATE KEY UPDATE NAME1=VALUES(ID)+1;

它是唯一键NAME1重复但是主键不重复,执行的语句是这样的:

INSERT INTO Tupdate() VALUES(1,1)
UPDATE Tupdate
SET NAME1=2+1
WHERE ID=1;

不要认为会插入主键ID=2的记录进去。

 

总结

 上面的三种处理重复值的方法都支持标准的INSERT语法,包括INSERT INTO...VALUES, INSERT INTO ....SET ,INSERT INTO..... SELECT。

转载自https://www.cnblogs.com/chenmh/p/5392540.html

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【性能测试】性能测试的基本流程

转发自博客园贺满:https://www.cnblogs.com/puresoul/p/5463477.html,有删减。 本文主要介绍下性能测试的基本流程,性能测试从实际执行层面来看,测试的过程一般分为这么几个阶段,如下图: 下面分别介绍下每个…

【性能测试】性能测试工具选择

转发自博客园贺满:https://www.cnblogs.com/puresoul/p/5503134.html,有删减。 本篇文章主要简单总结下性能测试工具的原理以及如何选型。性能测试和功能测试不同,性能测试的执行是基本功能的重复和并发,需要模拟多用户&#xff0…

【测试工具】禅道项目管理工具设置触发邮箱

禅道支持邮件提醒,当需求、任务、bug等发生变化的时候,可以发邮件提醒。 禅道提醒邮件默认通知范围(禅道9.8版本,可以在 后台-消息-设置中设置哪些动作需要发信): 1、Bug:指派给抄送 添加&#…

【性能测试】Linux系统监控-Top命令

前面转载的三篇文章主要介绍了性能测试的相关概念,其中有提到服务器,服务器的配置是性能测试中必须考虑的,而且性能测试中也必须监控服务器。 这篇文章主要介绍一下如何通过Linux服务器自带的top命令监控运行情况,以下是直接top命…

【性能测试】Linux系统监控-CPU信息

我们知道CPU对于服务器来说非常重要,下面我们从几个方面介绍linux服务器CPU相关信息: 先要理解以下几个概念: 1、一台物理机的物理CPU的个数 2、一个CPU上的核数 3、一个核上面支持的线程数 有下面的计算公式: 总核数 物理C…

【Linux】Linux简介以及 与UNIX区别

一直以来对Linux、Unix、linux内核、linux发行版的概念比较模糊,最近查找资料并经过自己的整理,主要总结了Linux和UNIX的区别和联系、内核和操作系统的关系、Linux操作系统和结构、发行版本CentOS介绍。 Linux 和 UNIX 的关系/区别 Linux 是一个类似 U…

【视频】视频文件格式和视频编码

我们经常在电脑、电视、手机或者其他终端产品看视频,我们对视频有个大概了解,比如清晰度、大小、视频类型等,但是对于视频内部结构我们应该一无所知,现在我们来一步一步解开视频的神秘面纱。 首先大家要清楚两个概念,视…

【文字识别】Python3使用百度AI进行文字识别

将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制。 Tesseract 是一个OCR 库,目前…

python 对json数据读取及保存与读取,对dump,dumps,load,loads的理解

一、对json文件的读取 data1{"programmers":[{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" },{ "firstName": "Jason", "lastName":"Hunte…

【图片】Python对RGB颜色与16进制颜色进行互转

RGB颜色被称为“真彩色”,是Photoshop中默认使用的颜色,也是最常用的一种颜色模式。RGB模式的图像由3个颜色通道组成,分别为红色通道(Red)、绿色通道(Green)和蓝色通道(Blue&#xf…

【Python】pyinstaller模块将py文件打包为windows可执行文件exe

python脚本如果在没有安装python的机器上不能运行,所以将脚本打包成exe文件,降低脚本对环境的依赖性,同时运行更加迅速。当然打包的脚本似乎不是在所有的win平台下都能使用,win7有一部分不能使用,我在win10能够很好的运…

html img src

< img >标签 代表 图片&#xff0c;img标签的作用是向网页中插入一张图片&#xff0c;并不是将图片绘制到网页中。 src 属性&#xff1a;“插入”图片到网页中去。 alt 属性&#xff1a;值可以是一段文字&#xff0c;当图片由于各种原因无法显示时&#xff0c;alt属性的…

【自动化】Python3+Selenium3自动化测试-准备工作

# 系统&#xff1a;win7(64位) # 浏览器&#xff1a;Chrome(75.0.3770.100) # python版本&#xff1a;3.7.0 # Selenium&#xff1a;3.14.1 Selenium简介 Selenium是一款适用于Web应用程序的便携式软件测试框架。 Selenium为编写测试提供了一个回放工具&#xff0c;无需学习测…

基本数据类型float和double的区别

float : 单精度浮点数 double : 双精度浮点数 两者的主要区别如下&#xff1a; 01.在内存中占有的字节数不同 单精度浮点数在机内存占4个字节 双精度浮点数在机内存占8个字节 02.有效数字位数不同 单精度浮点数有效数字8位 双精度浮点数有效数字16位 03.数值取值范围 单精度浮…

【数据库】mysql常用的数据类型

数据类型是指列、存储过程参数、表达式和局部变量的数据特征&#xff0c;它决定了数据的存储格式&#xff0c;代表了不同的信息类型。 有一些数据是要存储为数字的&#xff0c;数字当中有些是要存储为整数、小数、日期型等... MySQL支持多种类型&#xff0c;大致可以分为四类&a…

【Python】base64模块对图片进行base64编码和解码

图片的base64编码就是可以将一副图片数据编码成一串字符串&#xff0c;使用该字符串代替图像地址。 这样做有什么意义呢&#xff1f;我们知道&#xff0c;我们所看到的网页上的每一个图片&#xff0c;都是需要消耗一个 http 请求下载而来的。 没错&#xff0c;不管如何&#xf…

Mysql错误2003 -Can't connect toMySQL server on 'localhost'(10061)解决办法

错误图片 昨天晚上还在用mysql来存储东西,而今天早上发现mysql数据库根本打不开,吓了我一大跳,本来就想重装mysql服务,但是我的数据库都没了,相当于大楼盖起来了,地基一下出现了裂缝,后来经过研究解决办法 如下 我发现mysql的服务一直无法启动如图 显示Cant connect toMySQL s…

【Python实战】使用python计算多种还款方式的还款计划

随着人们经济活动的增加&#xff0c;用钱的地方越来越多&#xff0c;不管是像买房这样的大额支出还是个人消费型支出&#xff0c;越来越多的人选择贷款来解决眼前的经济危机。 而申请贷款就涉及到选择不同的还款方式&#xff0c;所需要偿还的欠款综合也大有不同&#xff0c;那么…

echarts自定义showlading()样式和文本

1、首先引入echarts.js 2、在页面定义自己的echarts变量 var myChart echarts.init(document.getElementById(main)); 3、自定义showLoading()样式 myChart.showLoading(default, {text:统计中&#xff0c;请稍候...,maskColor: #404a59,textColor: #fff,}); text:文本内…

测试人员做到这几点,线上80%的BUG将落入你手,企业将避免重大风险

BUG事故给敲了很大的警钟&#xff0c;也给公司带来重大损失&#xff0c;作为测试人员&#xff0c;我们如何提现发现线上BUG并及时解决&#xff0c;避免落入用户手中&#xff0c;给企业带来无法挽回的损失。 案例1&#xff1a; 1月20日凌晨&#xff0c;拼多多App因技术漏洞&am…