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