Mysql INSERT INTO .. ON DUPLICATE KEY更新多行记录
1. 如果在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;
2. 如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。
3.现在问题来了,如果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);
4. 以上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标准语法!
insert into channelinfo(CardWid, ChannelName,ChannelAds,mfFormula,mfTips,`call`,traffic,message,CreateTime,UpdateTime,yn) values (008,'123','123','123','123','123','123','123',now(),now(),1) ON DUPLICATE KEY UPDATE ChannelName = VALUES(ChannelName),ChannelAds = VALUES(ChannelAds),mfFormula = VALUES(mfFormula),`call` = VALUES(`call`),traffic = VALUES(traffic),message=VALUES(message),updatetime=VALUES(updatetime)
参考:http://www.ludou.org/insert-into-on-duplicate-key-update-for-multiple-items.html
http://lobert.iteye.com/blog/1604122
Mysql INSERT INTO .. ON DUPLICATE KEY更新多行记录相关推荐
- MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用
2019独角兽企业重金招聘Python工程师标准>>> 1. 语法规则为: INSERT [INTO] tbl_name[(col_name,...)]{VALUES} ({expr ...
- mysql批量insert bug_MySQL Bug insert into on duplicate key update 语法更新 text blob 大字段导致 MySQL crash...
1. 背景 业务执行 SQL 导致 MySQL 进程 Crash,做故障切换后,新的主库又 Crash 了.查看 MySQL 错误日志,发现多次 Crash 时的堆栈相同,如下: Thread poi ...
- mysql批量更新,批量插入之replace语句/insert into... on duplicate key update语句
mysql批量更新/插入数据有以下方法,使用这些方法批量插入数据/更新数据的时候就不用在代码层次增加判断数据是否已存在的逻辑了. 1:replace语句 2: insert into... on du ...
- MySQL插入语句insert into,insert ignore into,insert into ... on duplicate key update,replace into-解决唯一键约束
文章目录 常用插入语句 insert into insert ignore into insert into ... on duplicate key update replace into 使用场景 ...
- mysql使用INSERT INTO ON DUPLICATE KEY UPDATE导致dead lock分析和解决
一.事件回放 2019年1月的几天时间里每天会收到1次或者2次死锁的短信告警,死锁日志如下图. 二.检查业务场景和程序处理流程 用户打赏礼物请求处理,涉及到用户余额表和佣金账户表,以下所有操作在一个事 ...
- mysql insert into on_MySQL之INSERT INTO ON DUPLICATE KEY UPDATE用法详解 | 夕辞
MySQL数据库使用中如果主键或唯一键冲突,会报错,因此我们会用到insert into on duplicate key update语法,但是该语法具体怎么用以及返回什么值,今天就来讨论下. 首先 ...
- mysql 中 replace into 与 insert into on duplicate key update 的使用和不同点
replace into和insert into on duplicate key update都是为了解决我们平时的一个问题 就是如果数据库中存在了该条记录,就更新记录中的数据,没有,则添加记录. ...
- [原] insert into … on duplicate key update / replace into 多行数据
场景是这样的,我有KV型的表,建表语句如下: CREATE TABLE `dkv` (`k1` int(11) NOT NULL DEFAULT '0',`k2` int(11) NOT NULL D ...
- mysql批量条件字段_mysql批量更新多条记录的同一个字段为不同值的方法
首先mysql更新数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 也可以这 ...
最新文章
- 陶哲轩实分析 习题 13.4.6
- VC开发多语言界面支持的简单方法
- 你需要XXX的权限对此文件(此文件夹进行)修改
- [9]UITableView表视图1
- 汽车电子专业知识篇(三)-双目视觉三大应用视觉深度、标定、立体匹配
- android 主流分辨率是多少,android 屏幕分辨率问题
- leetcode专题训练笔记
- 聊天机器人不仅能省下客服成本 体验可能会更好
- go语言学习---数据类型、运算符、表达式
- Mapreduce中的分区Partitioner
- LM358是双运算放大器IC电路应用原理图
- 第一章 ArcGIS初识
- 可扩展性设计之数据切分
- 腾讯视频弹幕屏蔽js
- 让人心疼的12句话。。哪句说到你的痛了?
- R语言学习笔记(1~3)
- docker desktop 点击setting 一直转圈圈
- MongoDB 地理空间查询
- 从零开始学USB(二十二、USB接口HID类设备(四)_报表描述符Local类)
- IDEA 2020/7/28更新特性速览 - 对于各框架的支持,版本控制工具,docker,构建工具等的支持
热门文章
- html css integrity,integrity 属性
- python 调用sqldr_sqlldr并发
- 互联网协议 — TCP — 拥塞控制(网络质量保障)
- 5G 信令流程 — 5GC 的会话管理(SM,Session Management)
- Openstack贡献者须知 — OpenPGP/SSH/CLA贡献者协议
- Newtonsoft.Json 概述
- MYSQL连接字符串参数详细解析(大全参考)
- Golang sync
- 一位软件工程师的6年总结(转载)
- s5pv210 uboot-2012-10移植(三) 之支持SPL