• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > Mysql中Insert into xxx on duplicate key update问题

Mysql中Insert into xxx on duplicate key update问题

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了duplicate,key,update等相关知识,希望本文的分享对您有所帮助

在看代码的过程中碰到了这一用法,不太理解,google了一下。它的意义其实是如果在insert语句末尾制定了on duplicate key update语句的话,则当插入行会导致一个unique索引或者primary key中出现重复值,则执行update中的语句,否则才插入新行

例如,如果列a被定义为unique,并且值为1,则下列语句有同样的效果,也就是说一旦出入的记录中存在a=1的情况,直接更新c = c + 1,而不执行c = 3的操作。
代码如下:
insert into table(a, b, c) values (1, 2, 3) on duplicate key
update c = c + 1;1 update table set c = c + 1 where a = 1;

另外值得一提的是,这个语句知识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标准语法!
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Mysql中Insert into xxx on duplicate key update问题
  • Mysql中Insert into xxx on duplicate key update问题
  • mysql error:#1062 Duplicate entry ‘***′ for key 1问题解决
  • MYSQL的REPLACE和ON DUPLICATE KEY UPDATE语句介绍解决问题实例
  • MySQL的Replace into 与Insert into on duplicate key update真正的不同之处
  • mysql ON DUPLICATE KEY UPDATE语句示例
  • insert into … on duplicate key update / replace into 多行数据介绍

相关文章

  • 2018-12-05最长用最基本的MSSQL数据库备份与还原
  • 2018-12-05mysql 动态执行存储过程语句
  • 2018-12-05MySQL--pt-osc的介绍与使用
  • 2018-12-05MySQL根据离线binlog快速“闪回”的详情介绍
  • 2017-05-11将MySQL的临时目录建立在内存中的教程
  • 2018-12-05《python基础教程》笔记之条件语句和循环语句
  • 2018-12-05mysql中对表的操作教程
  • 2018-12-05MyBatis3 用log4j在控制台输出 SQL( 数据库操作技巧)
  • 2018-12-05sqlserver中比较一个字符串中是否含含另一个字符串中的一个字符
  • 2018-12-05Mysql中的Sequence实现方法实例详解

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 数据库中的事务和并发问题的实例讲解
    • 学习 MySQL 应该掌握的 6 个技巧
    • 如何远程连接SQL Server数据库图文教程
    • 介绍一个简单的数据库Database 教程(三)
    • mysql 无限级分类实现思路
    • mysql千万级数据大表该如何优化?
    • Mysql内存参数优化
    • Oracle 安装和卸载问题收集(集合篇)第1/6页
    • MYSQL随机抽取查询 MySQL Order By Rand()效率问题
    • 解决SQL Server的“此数据库没有有效所有者”问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有