ON DUPLICATE KEY UPDATE 作用及一句SQL实现批量修改
ON DUPLICATE KEY UPDATE 作用及一句SQL实现批量修改
本文学习自ON DUPLICATE KEY UPDATE 用法与说明
首先声明:ON DUPLICATE KEY UPDATE 为MySQL特有语法;
语句的作用:当insert已经存在的记录时,执行update
用法
举个栗子:
table1表中有几条数据如下:
表中的主键为ID,现要插入一条数据,ID为4
,name为修改4
,password为xiugaimima4
,正常写法为:
INSERT INTO table1(`id`,`name`,`password`,`date`)
VALUES('4','修改4','xiugaimima4',now());
执行后刷新表数据,我们来看表中内容:
此时表中数据增加了一条主键为id
为’1’,name
为’修改4’,password
为’xiugaimima4’的记录,当我们再次执行插入语句时,会发生什么呢?
执行:
INSERT INTO table1(`id`,`name`,`password`,`date`)
VALUES('4','修改4','xiugaimima4',now());
MySQL告诉我们,我们的主键冲突了,看到这里我们是不是可以改变一下思路,当插入已存在主键的记录时,将插入操作变为修改:
在原SQL后面增加 ON DUPLICATE KEY UPDATE
INSERT INTO table1(`id`,`name`,`password`,`date`)
VALUES('4','修改4','xiugaimima4',now())
ON DUPLICATE KEY UPDATE
id='5',password='xiugaimima5';
我们再一次执行:
可以看到,受影响的行为2,这是因为将原有的记录修改了,而不是执行插入,看一下表中数据:
原来id
为4的记录,改为了5,password也变为了xiugaimima5,很好的解决了重复插入问题。
扩展
当插入多条数据,其中不只有表中已存在的,还有需要新插入的数据,MySQL会如何执行呢?
会不会报错呢?
其实MySQL远比我们想象的强大,会只能的选择更新还是插入,我们尝试一下:
INSERT INTO table1(`id`,`name`,`password`,`date`)
VALUES('4','修改5','xiugaimima5',now()),
('5,'修改4','xiugaimima4',now())
ON DUPLICATE KEY UPDATE
id='5',name='修改4',password='xiugaimima4';
运行SQL语句:
MySQL执行了一次修改,一次插入,表中数据为:
将ID为5的修改了两个字段的值,新增了一条ID为4的记录。
VALUES修改,做到一条SQL语句批量修改多条数据的不同字段
那么问题又来了,有人会说我ON DUPLICATE KEY UPDATE 后面跟的是固定的值,如果我想要分别给不同的记录修改不同的值怎么办呢?
INSERT INTO table1(`id`,`name`,`password`)
VALUES('4','修改4','xiugaimima4'),
('5,'修改5','xiugaimima5')
ON DUPLICATE KEY UPDATE
name=VALUES(name),password=VALUES(password);
可以将后面的修改条件改为VALUES(password),动态的传入要修改的值;
执行如下:
成功的修改了两条记录,刷新一下表
我们成功的将不同ID的name、password修改成了不同的值。
但是,这是需要注意的是:
选择写入的字段必须包含所有not null
的字段,即非空的字段,如果少写了非空字段,则会报错!!
比如,只想修改name字段,但是password字段也必须写上,如果不想修改password字段,可以写入原来的值。
例如:
虽然我们想要实现一个批量修改的操作,但是实则首先执行的是插入语句,当插入语句(INSERT INTO)执行过程中发现已有重复的主键时才会执行更新(UPDATE)语句,所以非空字段(NOT NULL)一定要写全!
总结
ON DUPLICATE KEY UPDATE 能够让我们便捷的完成重复插入的开发需求,能够让我们使用一条SQL语句实现批量修改多条记录的功能,但它是MySQL的特有语法,使用时应多注意主键和插入值是否是我们想要插入或修改的key、value;还应注意想要实现批量修改时非空字段都要写上。
本文学习自ON DUPLICATE KEY UPDATE 用法与说明
ON DUPLICATE KEY UPDATE 作用及一句SQL实现批量修改相关推荐
- ON DUPLICATE KEY UPDATE 用法与说明
ON DUPLICATE KEY UPDATE作用 先声明一点,ON DUPLICATE KEY UPDATE为Mysql特有语法,这是个坑 语句的作用,当insert的时候如果对应的记录已经存在,则 ...
- insert...on duplicate key update语法详解
一.作用和使用场景 在mysql入库时,不能出现两条数据主键一致的情况,因为在两条数据的主键一致的情况下,mysql就会判定为待插入数据在数据库中存在重复数据,也就是说判断数据是否重复是根据主键来区别 ...
- 深入mysql ON DUPLICATE KEY UPDATE 语法的分析
mysql "ON DUPLICATE KEY UPDATE" 语法 如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNI ...
- 【MySQL】ON DUPLICATE KEY UPDATE 解决重复插入问题
参考文章:mysql "ON DUPLICATE KEY UPDATE" 语法 ON DUPLICATE KEY UPDATE 开发过程中,可能会遇到这样的需求,先判断某一记录是否 ...
- ON DUPLICATE KEY UPDATE
INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO,两个命令可以处理重复键值问题,在实际上它之间有什么区别呢? 前提条件是这个表必须有一个唯一索引或主 ...
- MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...
MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...
- [原] 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避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)
本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,各位同学可尝试参考. 案一:使用ignore ...
- ON DUPLICATE KEY UPDATE 用法
注意:ON DUPLICATE KEY UPDATE 是Mysql特有的语法,仅Mysql有效. 作用:当执行insert操作时,有已经存在的记录,执行update操作. 用法: 有一个test表,i ...
最新文章
- 腾讯云TDSQL数据库核心技术理论取得进展 ,同时发布数据异常检测工具
- 对称加密——对入参进行DES加密处理
- Windows下curl的下载与使用
- ClickHouse最详细的入门教程(一):部署运行
- Apache Thrift的使用
- .NET Core 3.0及ASP.NET Core 3.0 前瞻
- php curl伪装cookies,php curl 添加cookie伪造登陆抓取数据
- OpenCV rectangle
- Docker学习总结(19)——Google开源的容器集群管理系统Kubernetes介绍
- c语言课程案例设计报告,C语言课程设计报告—范例解读.doc
- C#获得Access数据库中的表名,以及根据表名获取字段名
- 字符串中第一个只出现一次的字符
- 2021-09-30安装windows10+ubuntu双系统
- linux解压文件卡住,linux停解压文件
- 云计算时代迎接挑战方能脱颖而出
- beamer制作学术slide
- 批量替换Excel超级链接
- 程序员们,你会考虑使用中文编程吗?
- 人工智能学术论坛参会总结【附PPT】
- 关于裁判文书网的一些建议
热门文章
- 2015年哈工大数理逻辑A期末考试参考答案(2)
- 利用Serv-u提权的简单思路
- 安装mingw+Theano+keras(多警告、错误解决办法)
- scala中的breakable{}实现continu 与break
- 复制excel或word中图片不失真
- Python 产生随机数
- 【C语言】求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一个函数根据求出的最大公约数求最小公倍数。
- 2.电调(ESC)-XP7A刷BLHeli固件(四轴专用,更快响应)
- 关于MFC模态对话框dlg.DoModal()返回-1的可能原因
- 在vscode中运行jupyter时报错