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

  

  

 

 

 

  

  

 

  

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM