INSERT INTO .. ON DUPLICATE KEY更新多行记录

时间:2024-01-21 23:27:49 

如果在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标准语法

标签:ON,DUPLICATE,KEY
0
投稿

猜你喜欢

  • javascript 实现的完全兼容鼠标滚轴缩放图片的代码

    2024-04-10 16:09:43
  • XML教程—编写结构完整的XML文档

    2008-10-11 13:43:00
  • Python使用Flask Migrate模块迁移数据库

    2023-08-10 09:17:30
  • 图神经网络GNN算法基本原理详解

    2023-08-08 23:53:53
  • 简单了解mysql mycat 中间件

    2024-01-19 18:59:13
  • python utc datetime转换为时间戳的方法

    2021-11-18 07:11:44
  • 一文详解Go中方法接收器的选择

    2024-05-28 15:36:32
  • python中enumerate函数用法实例分析

    2023-04-02 05:14:20
  • 数据库新手入门之MYSQL出错代码列表

    2008-12-23 15:22:00
  • Python之split函数的深入理解

    2022-12-22 19:58:25
  • PyQt5实现用户登录GUI界面及登录后跳转

    2021-04-08 07:50:03
  • Python实现的IP端口扫描工具类示例

    2023-02-25 07:22:25
  • 在MySQL数据库中如何修改密码及访问限制

    2008-11-27 16:36:00
  • 让Python程序定时执行的8种方法整理

    2023-05-16 01:32:22
  • python+openCV对视频进行截取的实现

    2023-01-18 22:27:53
  • Mysql误删数据解决方案及kill语句原理

    2024-01-26 20:22:15
  • 修改 Navicat 默认备份路径

    2009-08-23 21:10:00
  • MySQL的索引原理以及查询优化详解

    2024-01-13 14:04:38
  • python保存图片的四个常用方法

    2023-10-03 15:06:37
  • Python 利用切片从列表中取出一部分使用的方法

    2021-04-05 14:14:19
  • asp之家 网络编程 m.aspxhome.com