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,这是因为将原有的记录修改了,而不是执行插入,看一下表中数据:

原来id4的记录,改为了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实现批量修改相关推荐

  1. ON DUPLICATE KEY UPDATE 用法与说明

    ON DUPLICATE KEY UPDATE作用 先声明一点,ON DUPLICATE KEY UPDATE为Mysql特有语法,这是个坑 语句的作用,当insert的时候如果对应的记录已经存在,则 ...

  2. insert...on duplicate key update语法详解

    一.作用和使用场景 在mysql入库时,不能出现两条数据主键一致的情况,因为在两条数据的主键一致的情况下,mysql就会判定为待插入数据在数据库中存在重复数据,也就是说判断数据是否重复是根据主键来区别 ...

  3. 深入mysql ON DUPLICATE KEY UPDATE 语法的分析

    mysql "ON DUPLICATE KEY UPDATE" 语法 如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNI ...

  4. 【MySQL】ON DUPLICATE KEY UPDATE 解决重复插入问题

    参考文章:mysql "ON DUPLICATE KEY UPDATE" 语法 ON DUPLICATE KEY UPDATE 开发过程中,可能会遇到这样的需求,先判断某一记录是否 ...

  5. ON DUPLICATE KEY UPDATE

    INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO,两个命令可以处理重复键值问题,在实际上它之间有什么区别呢? 前提条件是这个表必须有一个唯一索引或主 ...

  6. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...

    MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法. 第一种:示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语 ...

  7. [原] 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 ...

  8. MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)

    本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,各位同学可尝试参考. 案一:使用ignore ...

  9. ON DUPLICATE KEY UPDATE 用法

    注意:ON DUPLICATE KEY UPDATE 是Mysql特有的语法,仅Mysql有效. 作用:当执行insert操作时,有已经存在的记录,执行update操作. 用法: 有一个test表,i ...

最新文章

  1. 腾讯云TDSQL数据库核心技术理论取得进展 ,同时发布数据异常检测工具
  2. 对称加密——对入参进行DES加密处理
  3. Windows下curl的下载与使用
  4. ClickHouse最详细的入门教程(一):部署运行
  5. Apache Thrift的使用
  6. .NET Core 3.0及ASP.NET Core 3.0 前瞻
  7. php curl伪装cookies,php curl 添加cookie伪造登陆抓取数据
  8. OpenCV rectangle
  9. Docker学习总结(19)——Google开源的容器集群管理系统Kubernetes介绍
  10. c语言课程案例设计报告,C语言课程设计报告—范例解读.doc
  11. C#获得Access数据库中的表名,以及根据表名获取字段名
  12. 字符串中第一个只出现一次的字符
  13. 2021-09-30安装windows10+ubuntu双系统
  14. linux解压文件卡住,linux停解压文件
  15. 云计算时代迎接挑战方能脱颖而出
  16. beamer制作学术slide
  17. 批量替换Excel超级链接
  18. 程序员们,你会考虑使用中文编程吗?
  19. 人工智能学术论坛参会总结【附PPT】
  20. 关于裁判文书网的一些建议

热门文章

  1. 2015年哈工大数理逻辑A期末考试参考答案(2)
  2. 利用Serv-u提权的简单思路
  3. 安装mingw+Theano+keras(多警告、错误解决办法)
  4. scala中的breakable{}实现continu 与break
  5. 复制excel或word中图片不失真
  6. Python 产生随机数
  7. 【C语言】求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一个函数根据求出的最大公约数求最小公倍数。
  8. 2.电调(ESC)-XP7A刷BLHeli固件(四轴专用,更快响应)
  9. 关于MFC模态对话框dlg.DoModal()返回-1的可能原因
  10. 在vscode中运行jupyter时报错