当前位置: 首页 > 编程日记 > 正文

mysql insertOrUpdate 方法

为什么80%的码农都做不了架构师?>>>   hot3.png

自己对这个方法又有点小心得 分享下

https://my.oschina.net/hccake/blog/777225

mysql "ON DUPLICATE KEY UPDATE" 语法
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。 
例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果:

代码如下:


INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;


如果行作为新记录被插入,则受影响行的值显示1;如果原有的记录被更新,则受影响行的值显示2。 
这个语法还可以这样用: 
如果INSERT多行记录(假设 a 为主键或 a 是一个 UNIQUE索引列):

复制代码代码如下:


INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;

执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1).

复制代码代码如下:


INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);


执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7). 
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法! 
这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景.

INSERT INTO .. ON DUPLICATE KEY更新多行记录
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:

复制代码代码如下:


INSERT INTO TABLE (a,b,c) 
VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;


如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。
如果你想了解更多关于INSERT INTO .. ON DUPLICATE KEY的功能说明,详见MySQL参考文档:13.2.4. INSERT语法

现在问题来了,如果INSERT多行记录, ON DUPLICATE KEY UPDATE后面字段的值怎么指定?要知道一条INSERT语句中只能有一个ON DUPLICATE KEY UPDATE,到底他会更新一行记录,还是更新所有需要更新的行。这个问题困扰了我很久了,其实使用VALUES()函数一切问题都解决了。

举个例子,字段a被定义为UNIQUE,并且原数据库表table中已存在记录(2,2,9)和(3,2,1),如果插入记录的a值与原有记录重复,则更新原有记录,否则插入新行:

复制代码代码如下:


INSERT INTO TABLE (a,b,c) VALUES 
(1,2,3),
(2,5,7),
(3,3,6),
(4,8,2)
ON DUPLICATE KEY UPDATE b=VALUES(b);


以上SQL语句的执行,发现(2,5,7)中的a与原有记录(2,2,9)发生唯一值冲突,则执行ON DUPLICATE KEY UPDATE,将原有记录(2,2,9)更新成(2,5,9),将(3,2,1)更新成(3,3,1),插入新记录(1,2,3)和(4,8,2)
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!

转载于:https://my.oschina.net/hccake/blog/734793

相关文章:

软件破解工具整理收集

1.调试工具softice 2.调试工具Trw2000 3.反汇编工具Wdasm8.93 4.Hiew 5.Visual Basic程序调试工具Smartcheck 6.十六进制编辑器(如:Ultraedit、WinHex、Hex Workshop 等) 7.注册表监视工具RegShot、regmon或RegSnap 8.侦测文件类型工具…

Linux 下 UltraEdit 版本: 16.1.0.18 破解 30 天试用限制

rm -rfd ~/.idm/uex rm -rf ~/.idm/*.spl rm -rf /tmp/*.spl

【ACM】杭电OJ 2149

Public Sale 【问题描述】 虽然不想,但是现实总归是现实,Lele始终没有逃过退学的命运,因为他没有拿到奖学金。现在等待他的,就是像FarmJohn一样的农田生涯。 要种田得有田才行,Lele听说街上正在举行一场别开生面的拍…

PV UV IP

UV (网站独立访客) 编辑UV是unique visitor的简写,是指通过互联网访问、浏览这个网页的自然人。独立IP:是指独立用户/独立访客。指访问某个站点或点击某条新闻的不同IP地址的人数,在同一天的00:00-24:00内,…

VBA中级班课时3小结

本课内容:工作簿和工作表对象 主讲:rover18 学习时间:2010年11月 本节课将学习工作簿对象Workbooks、Workbook与工作表对象Worksheets、Worksheet。在我们了解了VBA的四大要素——对象、属性、方法和事件后,会发现VBA的程序是对对…

解决firefox ubuntu无法打开页面的问题

firefox备份用户配置信息 https://support.mozilla.org/zh-CN/kb/%E5%A4%87%E4%BB%BD%E4%BD%A0%E7%9A%84%E4%BF%A1%E6%81%AF 把xxxxxxxx.default 覆盖掉xxxxxxxx.default-release里面的内容

js构造函数式编程

1.函数式编程 //创建和初始化地图函数:function initMap(){createMap();//创建地图setMapEvent();//设置地图事件addMapControl();//向地图添加控件}//创建地图函数:function createMap(){var map new BMap.Map("dituContent");//在百度地图容…

【ACM】绝地求生

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1009 【问题描述】 zbt最近喜欢上了《绝地求生》(pubg)游戏,pubg这个游戏有一种跑毒机制,每次会产生一个圆形的安全区,玩家需要从他的当前位置在一定时间内进入安…

【oracle】dblink创建

目的:oracle中跨数据库查询 两台数据库服务器db_A(本地)和db_B(远程192.168.1.100),db_A下用户user_a 需要访问到db_B下user_b的数据解决:查询得知使用dblink(即database link 数据库链)实现过程:1、确定用户user_a有没有创建 db…

ASan(Linux),gcc4.8以上版本自带的内存检查工具

转自:http://shafeng.github.io/2017/05/10/asan/ 最近线上的程序总是莫名其妙崩溃,因为我们的项目使用了分布负载的机制,对于玩家的影响其实很小,但是我肯定是忍不了的…程序崩溃的core文件里面完全找不到问题所在,初步分析应该是野指针导致,仔细分析程序之后并没有…

详解使用DockerHub官方的mysql镜像生成容器

为什么80%的码农都做不了架构师?>>> 写在前面:看到网上关于利用DockerHub官方的mysql镜像生成容器此类的文档比较少,故结合自身实践分享给大家,还望多多指教。 我的需求:利用docker 镜像快速建立一个mysql…

【ACM】奇怪的回文数

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1008 【问题描述】 “回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。 在数学中也有这样一类数字有这样的特征…

java I/O之装饰者模式

装饰者: Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。 装饰者模式意图: 动态的给一个对象添加额外的职责。Decorator比生产子类灵…

ubuntu下wireshark添加root权限

wireshark要监控eth0,但是必须要root权限才行。但是,直接用root运行程序是相当危险,也是非常不方便的。 解决方法如下: 1.添加wireshark用户组sudo groupadd wireshark 2.将dumpcap更改为wireshark用户组sudo chgrp wireshark /…

Oracle导出空表解决办法

在oracle 11g 中,发现传统的exp不能导出空的表 oracle 11g 新增了一个参数:deferred_segment_creation,含义是段延迟创建,默认是true。具体是什么意思呢? 如果这个参数设置为true,你新建了一个表T1&#xf…

【ACM】图像分类

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1003 【问题描述】 现在, 我们需要你来解决一项图像分类任务。 首先我们需要介绍下简单图像的数据存储形式,你可以粗略的认为图像在数字意义就是一个二维矩阵(我们这里不考虑…

【译】如何精确判断最终用户响应时间过长的原因?

译者:原始文章有点性能测试工具软文的感觉,毕竟文章来源于某工具官方博客。高手请略过。 对于我这种新手,此文还是给我带来一些惊喜,从上到下地,从表象到根源地,定位他们遇到性能问题-响应时间过长-的根本原…

javascript中重要概念-闭包-深入理解

在上次的分享中javascript--函数参数与闭包--详解,对闭包的解释不够深入。本人经过一段时间的学习,对闭包的概念又有了新的理解。于是便把学习的过程整理成文章,一是为了加深自己闭包的理解,二是给读者提供学习的途径,…

ssl握手过程和ca证书验证

转载:https://www.cnblogs.com/cposture/p/9029014.html SSL 认证 可以将 SSL 服务器与客户端之间的通信配置为使用单向或双向 SSL 认证。 单向 SSL 认证一般是客户端利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是…

【ACM】练武奇才

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1005 【问题描述】 很久很久以前,constbh大神还在上着小学。一天,在放学的路上,他被一位乞丐叫住,这位乞丐对constbh说,我看你骨骼惊奇,…

Bat命令学习

参考资料:http://www.cnblogs.com/SunShineYPH/archive/2011/12/13/2285570.html

记一次CentOS7内核kernel的删除重装

人生在于折腾,学习Linux更要多多折腾。在一次折腾中吸取教训,更易于记忆。今天我们来折腾Linux的内核:删除系统内核后,通过光盘进行kernel的重安装。友情提示:请在虚拟机环境进行,折腾前务必做好系统快照。…

tcpdump抓包并保存到远程服务器

有的时候,运行tcpdump抓包进程的主机A可能没有足够的硬盘空间。例如我们使用树霉派搭建了一个热点,然后我们想在树霉派上抓包,因为树霉派的存储很小,所以很容易在短时间内将存储空间使用完。 为了解决该问题,我们可以…

【ACM】家喻户晓的中药店(待更)

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/43/1007 【问题描述】 long_xiao和const_hhh是一对恩爱的夫妻。 他们在京城经营着一家中药店,夫妻二人医术精湛、古道热肠,虽然年过花甲,身体依然硬朗。更重要的是&#xff…

常用MySQL的命令集锦

常用MySQL的命令集锦 一、连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码…

google的gn构建系统

什么是GN? GN是一个生成Ninja构建文件的元构建系统,以便你可以用Ninja构建Chromium。 你为什么从GYP切换? 我们相信GN文件比GYP文件更具可读性和可维护性。GN很快: GN比GYP快20倍。GN支持作为构建的一部分,根据Ninj…

【ACM】五子棋

题目链接:http://acm.nuc.edu.cn/OJ/contest/show/25/1009 【问题描述】 五子棋想必大家都玩过,如果没有那我只能重新介绍一下规则了,当横竖斜(共八个方向)出现5个同色棋子时,则认为该颜色棋的选手获胜。…

源码编译安装httpd及其常见错误

一、编译安装的整体步骤 1、在官网下载源码,并解压2、切换到其目录中 3、执行./configure4、编译 二、编译中及安装后配置常见的参数及其说明编译中配置1)指定安装路径--prefix/usr/local/Pacakage_name 指定安装路径--sysconfigdir/etc/Package_name …

Nhibernate3循序渐进(三): 一对多映射和级联保存

我们知道, 对于数据库中的一对多关系, 我们在建表的时候, 应该在多表这里建立外键我们准备这样一个场景, 大学里的系和学生, 一个系有多个学生Department类和Xml如下:Department.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;namespa…

自定义UISearchBar外观

本文转载至 http://www.jianshu.com/p/66b5b777f5dc 最近,在项目过程中遇到要自定义SearchBar的外观,虽然自己觉得用系统默认的外观就行了,不过UI设计师要求不用系统的默认样式,要跟app主题保持 一致。 图1:设计效果图…