最近的業務中,有這樣乙個需求:如果資料存在就更新,不存在就寫入,一般情況下是需要先查詢,後判斷是更新還是寫入的,需要進行兩次io操作。所以為了減少同步時間,第乙個思路是使用併發,第二種思路就是應該儘量減少請求mysql的次數,這裡將講講第二種思路。正常情況下實現:如果存在就更新,不存在就寫入的偽**:
// 偽**
user=user.findbyid(1)
if user == nullelse
需要先查詢,然後再通過if / else來進行插入或更新,所以總共需要進行兩次資料庫io。
所以為了減少資料庫io,可以使用如下方法:
replace into的作用是:如果資料已經存在了我就更新。如果資料不存在就寫入。
而判斷資料是否已經存在的標準依然是:判斷唯一鍵是否重複。
step1:這是用於做實驗的表資料
step2:使用replace into插入一條主鍵已存在的資料:
可以看到replace into在這裡的作用是已存在則更新。
step3:使用replace into插入一條主鍵不存在的資料:
可以看到,replace into在這裡的作用是不存在則寫入。
所以replace into是完全可以滿足我們的需求的。
這種方法也是可以實現如果存在就更新,不存在就寫入的需求,如下:
但是使用這個方法會有點缺陷:
官網中有描述:如果你每次使用on duplicate key update進行更新時(注意是更新而不是插入),mysql也會讓last_insert_id變大。這就會出現id不連續增長的現象。
所以如果對主鍵的連續性有要求的話,推薦使用第一種方法。
吃水不忘挖井人:
Sql server如果存在就更新,不存在就插入
sql不同於mysql那樣,有單獨的乙個命令來執行上述操作,比如在mysql中就可以這樣寫 replace into demo in a,b,c values 123,2,4 在mysql中這是乙個原子操作,如果這條資料存在,就先刪除在插入,不存在就直接插入.要注意的是需要有乙個唯一的主鍵支援,如果...
MySQL中怎麼實現如果存在就修改不存在就新增
on duplicate key update的作用是先看insert中的內容是否存在,如果存在就執行後邊update中的語句.注意 前提是該錶要有主鍵索引.表結構 新增不存在的資料 源表資料 新增一條不存在的資料 insert into students values 3,源資料 18 on du...
mysql,存在就更新,不存在就插入
mysql 當記錄不存在時插入,當記錄存在時更新 網上基本有三種解決方法。第一種 示例一 插入多條記錄 假設有乙個主鍵為 client id 的 clients 表,可以使用下面的語句 insert into clients client id,client name,client type sel...