当前位置:  数据库>mysql

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

    来源: 互联网  发布时间:2014-10-11

    本文导语:  如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。例如,如果列a被定义为UNIQUE,并且包含值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;

如果行作为新记录被插入,则受影响行的值为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标准语法


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • MySql中使用INSERT INTO语句更新多条数据的例子
  • C++ Double Ended Queues 成员 insert():insert elements into the dequeue
  • mssql insert into 和insert into select性能比较
  • C++ MultiMaps 成员 insert():插入元素
  • 解决Hibernate JPA中insert插入数据后自动执行select last_insert_id()
  • C++ Maps 成员 insert():插入元素
  • 急!!! JSP对数据库 INSERT 记录.....................HOLEN
  • Web服务器/前端 iis7站长之家
  • 如何在SELECT/INSERT...语句中加入变量?
  • C++ Double Ended Queues(双向队列) 成员 insert():插入一个元素到双向队列中
  • 为什么没有insert()方法?
  • java命名空间java.awt类event的类成员方法: insert定义及介绍
  • INSERT出的问题,谢谢
  • java命名空间javax.swing枚举dropmode的类成员方法: on_or_insert定义及介绍
  • insert问题(初学者)
  • java命名空间javax.accessibility接口accessibletablemodelchange的类成员方法: insert定义及介绍
  • 如何insert日期类型 ?
  • C++ Vectors 成员 insert():插入元素到Vector中
  • 如何获的INSERT后的id(auto increment)的值?
  • java命名空间javax.swing.event类documentevent.eventtype的类成员方法: insert定义及介绍
  • 关于shell下面insert键失灵的解决办法
  • java命名空间javax.swing枚举dropmode的类成员方法: on_or_insert_rows定义及介绍
  • last_insert_id()准确吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3