当前位置:  数据库>mysql

Mysql中Insert into xxx on duplicate key update问题

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

    本文导语:  例如,如果列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...

例如,如果列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标准语法!

    
 
 

您可能感兴趣的文章:

  • mysql ON DUPLICATE KEY UPDATE语句示例
  • mysql #1062 –Duplicate entry '1' for key 'PRIMARY'
  • 深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析
  • mysql error:#1062 Duplicate entry ‘***′ for key 1问题解决方法
  • MYSQL的REPLACE和ON DUPLICATE KEY UPDATE语句介绍解决问题实例
  • mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )
  • MySQL的Replace into 与Insert into on duplicate key update真正的不同之处
  • mysql insert if not exists防止插入重复记录的方法
  • MySql中使用INSERT INTO语句更新多条数据的例子
  • mysql中insert与select的嵌套使用方法
  • PHP MySQL Insert Into用法
  • mysql中insert与select的嵌套使用解决组合字段插入问题
  • 解析MySQL中INSERT INTO SELECT的使用
  • MySQL 关于表复制 insert into 语法的详细介绍
  • MySQL中REPLACE INTO和INSERT INTO的区别分析
  • 这个jsp程序为什麽不能向mysql中插入数据呢?insert into语句有问题吗?
  • 使用MySQL的LAST_INSERT_ID来确定各分表的唯一ID值
  • MySQL生产库Insert了2次同样的记录但是主键ID是不一样的问题的分析过程
  • mysql 操作总结 INSERT和REPLACE
  • jsp连接MySQL实现插入insert操作功能示例
  • 逐步分析MySQL从库com_insert无变化的原因
  • MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql update语句的用法详解
  • linux script to update mysql data
  • apache模块 mysql数据库 update失败
  • MySQL 替换某字段内部分内容的UPDATE语句
  • linux mysql 报错:MYSQL:The server quit without updating PID file
  • 解析mysql与Oracle update的区别
  • Starting MySQL.Manager of pid-file quit without updating file.[FAILED]的解决方法
  • MySQL SELECT同时UPDATE同一张表问题发生及解决
  • Mysql跨表更新 多表update sql语句总结
  • mysql 一次更新(update)多条记录的思路
  • SQL语句详解 MySQL update的正确用法
  • MySQL提示:The server quit without updating PID file问题的解决办法
  • MySQL UPDATE更新语句精解第1/2页
  • sql server与mysql中update多条数据
  • mysql SELECT FOR UPDATE语句使用示例
  • mysql多表join时候update更新数据的方法
  • mysql update语句的用法详解
  • MySQL中SELECT+UPDATE处理并发更新问题解决方案分享
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • Mysql查询错误:ERROR:no query specified原因
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
  • MySQL Workbench的下载安装与使用教程
  • 在Linux内安装了Mysql,无法进入Mysql.
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式


  • 站内导航:


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

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

    浙ICP备11055608号-3