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 ;如果不存在相同的主键或唯一索引,则直接插入

  

  

  

  

  

  

  

  

最新文章

  1. 利用NSCalendar类实现日期的比较
  2. $.extend()、$.fn和$.fn.extend()
  3. [WPF系列]-Data Validation
  4. [转载]我的Java后端书架 (2016年暖冬4.0版)
  5. ES6的Iterator,jquery Fn
  6. Moqui学习Day2
  7. Java String类详解
  8. 张艾迪(创始人):拥抱单身与自由的Eidyzhang
  9. 看文档要看仔细,英语要加强啊... cocos2d-x 的 API 和 对应版本的 cocos2d-js 的 API 没有完全对应
  10. 极客”一词,来自于美国俚语“geek”的音译,一般理解为性格古怪的人
  11. Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试。
  12. python入门(Python和Pycharm安装)
  13. OLAP + MDX
  14. Dev-FAT-UAT-PRO
  15. [转帖]将改名贯彻到底,Xeon E3系列将改名为Xeon E
  16. BZOJ3459 : Bomb
  17. Android sdk 更新后编译不过,【Could not find com.android.sdklib.build.ApkBuilderMain】
  18. B+树索引
  19. 第十章 Secret & Configmap (中)
  20. 无线局域网中RADIUS协议原理与实现

热门文章

  1. openOffice word转pdf,pdf转图片优化版
  2. 洛谷 P1023 税收与补贴问题
  3. python 时间四舍五入
  4. mvn打包源码的方法:maven-source-plugin
  5. scp、paramiko、rsync复制文件的区别
  6. 【v2.x OGE-example 第三节 播放精灵动画】
  7. CentOS7.3编译安装Nginx设置开机启动
  8. hiho一下 第五十一周(有向图欧拉路径)51
  9. java设计模式 -------- 行为模式 之 策略模式(4)
  10. png图片解码