在處理大數(shù)據(jù)時,有時候會經(jīng)常遇到大量的數(shù)據(jù)需要更新或插入,如何進行優(yōu)化。 批量插入其實挺簡單,只要用insert into 后面跟多個VALUES集合即可。那么,批量更新有哪些方法呢? 一、使用insert into ... on duplicate key update insert into table (aa,bb,
在處理大數(shù)據(jù)時,有時候會經(jīng)常遇到大量的數(shù)據(jù)需要更新或插入,如何進行優(yōu)化。 批量插入其實挺簡單,只要用insert into 后面跟多個VALUES集合即可。那么,批量更新有哪些方法呢?
一、使用insert into ... on duplicate key update
insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo)
on duplicate key update aa=values(aa),bb=values(bb),cc=values(bb)+values(cc)
這種方法在插入前會判斷主鍵或唯一值存在,values后可跟多條記錄。如果不存在則批量插入;如果存在則更新操作,更新規(guī)則可以自定義,cc=values(bb)+values(cc)
二、使用replace into tab (),(),..
replace into table (aa,bb,cc)
values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc)
該方式表是要有唯一主鍵的。原理跟A差不多。判斷主鍵,存在即更新,不存在則插入。 如果只更新其中1、2個字段的時候,不要用這個方法,否則會將其他的字段置空,或者執(zhí)行前將values值填寫完整。
不過該方法有個坑,對于配置有主從服務(wù)器的時候,會導(dǎo)致從庫的自增主鍵與主庫的自增主鍵無法保持一致。詳細(xì)鏈接: http://blog.xupeng.me/2013/10/11/mysql-replace-into-trap/
注:replace into 和insert into on duplicate key update的不同:
a、replace into 操作本質(zhì)是對重復(fù)的記錄先delete 后insert,如果更新的字段不全會將缺失的字段置為缺省值。
b、insert into 則是只update重復(fù)記錄,不會改變其它字段。
三、創(chuàng)建臨時表,先更新臨時表,然后從臨時表中update
create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com