mysql之replace into与 insert into duplicat key for update

  mysql实际应用中,我们在插入数据的时候,经常遇到主键冲突的情况,这是因为库中已经存在相同主键的数据,这时,我们只能更新数据;在判断是更新数据还是插入数据,我们还需要在此之前做一些必要的判断;在mysql中有没有一种集插入更新于一体的方法呢,答案是有,这就是insert  into 的加强版replace into 
tableName values()和insert into tableName  values()  on duplicat key  update  ...

  


 1.创建测试表并插入数据

  create table replaceTest(
    id int not null auto_increment,
    name varchar(20) ,
    addr varchar(100),
    primary key (id)
  )charset = utf8

  -- 插入数据

  insert into replaceTest values(null,'aa','bbbbbb'),(null,'cc','ddddd'),(null,'ee','fffff');

2.replace into 是insert into 的加强版,既可以更新数据也可以插入数据;它的执行逻辑是:首先判断是否存在相同的唯一主键或者唯一索引,如果存在,在更新数据,否则,插入数据,例如:

  

  之所以会是2行数据受到影响,是因为表中已存在主键为1的数据,mysql先将原有的数据删除,并将新的数据插入,因此受影响的是2行数据

  在看下面的例子:

  

  查询结果,说明是先删除后插入:

  

3.insert into  on duplicat key udpate 和replace into 类似,也是可以插入和更新,它们的不同点是,insert into 只更新update后面的字段。

4.总结:如果存在相同的主键或唯一索引,replace into 相当于先删除数据而后在插入,如果不存在相同的主键和唯一索引,则直接插入。

    如果存在相同的主键或唯一索引,insert into  on duplicate key update只更新update后面的字段,相当于udpate ;如果不存在相同的主键或唯一索引,则直接插入

  

  

 

 

 

  

  

 

  

  

  

  

转载于:https://www.cnblogs.com/wqk66/p/10749283.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值