Mysql的Replace和ON DUPLICATE KEY UPDATE的用法与作用

转载 2011年01月20日 13:36:00
最近在项目开发中发现经常会遇到这种情况:想要插入一条数据,但是希望如果数据表中已经存在此数据的编号则更新此数据。

 

遇到此种情况我之前是先查询,然后用程序判断是否有结果,如果有则更新此数据,若无则插入新数据。


但是你会发现这样会感觉代码量增加,所以放弃了此种方法。


由于我使用的是MYSQL数据库,没有像ORACLE中的merger方法,所以在网上Google了下,又翻了下手册,终于有了收获,那就是

 

INSERT ... ON DUPLICATE KEY UPDATE语句。

 

INSERT ... ON DUPLICATE KEY UPDATE的作用:插入数据时,如果插入的数据中对应的主键或唯一索引的值在表中已存在,则将此条数据对应的字段值修改。如果不存在则直接插入。

 

INSERT ... ON DUPLICATE KEY UPDATE的用法:

 

insert into test2 select * from test1 on duplicate key update a = 'REMOVE-ME';

 

这样使用后,你只需一行sql语句就能达到刚才的要求。

 

同时我还找到另一个语法:Replace

 

Replace的作用:插入数据时,如果插入的数据中对应的主键或唯一索引的值在表中已存在,则先讲表中的值删除,然后在插入。如果不存在则直接插入

 

Replace的用法:


REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)]

 

{VALUES | VALUE} ({expr | DEFAULT},...),(...),...

 

or:

 

REPLACE [LOW_PRIORITY | DELAYED][INTO] tbl_name  SET col_name={expr | DEFAULT}, ...

 

Or:

 

REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)]SELECT ...

 

Example: REPLACE INTO table_name SELECT * FROM table_name;

 

此语句可以用来做表数据间的复制或其他适合的操作。

mysql数据库Insert语句后面加ON DUPLICATE KEY UPDATE,保证唯一性

如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不...
  • nature_fly088
  • nature_fly088
  • 2017年02月08日 14:22
  • 372

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY'

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysql...
  • kingofworld
  • kingofworld
  • 2014年09月28日 15:45
  • 3765

ibatis.net 按实体insert数据,批量insert,同时解决ON DUPLICATE KEY

一、insert 单条model(entity)动态xml如下:              insert intocartype(CarTypeId,CarTypeName,parking_id,S...
  • hddd2009
  • hddd2009
  • 2015年12月02日 20:02
  • 1928

【详解】【记录】on duplicate key update简单使用

今天在脚本中看到了如下SQL语句: INSERT INTO BUSINESS_GAME_C2C_DAY ( CREATED_DATE, HANG_CNT, GENERATE_CNT, GEN...
  • AKAK714
  • AKAK714
  • 2015年12月15日 17:03
  • 271

mysql中replace函数的用法

##-----MySQL数据替换即replace的运用-----## #这里主要介绍一些关于replace函数的用法。关于研究这个主要是发现replace功能很强大 #对于屏蔽关键字很有用处。 ...
  • shuiyichuan
  • shuiyichuan
  • 2014年02月14日 14:40
  • 1916

mysql InnoDB表插入操作报duplicate entry for primary 却查询不到重复的主键

在腾讯实习的为数不多的最后几天日子里,碰到了一个很奇怪的mysql插入失败,具体情形如下: 这是show create table schedule_detail_material;的结果 这是s...
  • huanghanqian
  • huanghanqian
  • 2017年01月12日 15:07
  • 855

replace和update的区别是什么

replace 来自于古老的 xBase 语法,update 来自于 SQL 语法。 对于单表来说,除了语法上的区别之外,功能基本相同。 对多表替换来说,replace 需要从表先有索引,然后主表...
  • qq_27416209
  • qq_27416209
  • 2016年07月25日 10:17
  • 493

MYSQL开发性能研究之INSERT,REPLACE,INSERT-UPDATE性能比较

一、为什么要有这个实验 我们的系统是批处理系统,类似于管道的架构。而各个数据表就是管道的两端,而我们的程序就类似于管道本身。我们所需要做的事情无非就是从A表抽取数据,经过一定过滤、汇总等操作放置...
  • xiefangjin
  • xiefangjin
  • 2016年04月08日 00:08
  • 523

on duplicate key update导致主键不连续自增的问题

最近项目上需要实现这么一个功能:统计每个人每个软件的使用时长,客户端发过来消息,如果该用户该软件已经存在增更新使用时间,如果没有则新添加一条记录,代码如下: ...
  • u011900448
  • u011900448
  • 2017年02月13日 09:57
  • 1452

mysql死锁几种情况的测试

sessionA: test>begin -> ; Query OK, 0 rows affected (0.00 sec)test>select * from tt where id_...
  • aoerqileng
  • aoerqileng
  • 2016年05月09日 16:58
  • 4220
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mysql的Replace和ON DUPLICATE KEY UPDATE的用法与作用
举报原因:
原因补充:

(最多只允许输入30个字)