- 批量插入並更新
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)
a、更新操作,values後可跟多條記錄,主鍵或唯一值存在,則按最後提供的規則進行更新,規則自定義,cc=values(bb)+values(cc)
b、只更新最後添加的字段,bb=values(bb)
c、更新時,如果有類似create_date 不爲空而且沒有默認值的列,需要在key和value中添加,但最後更新的列中不一定包含此列。 ex: insert into table (aa,bb,create_date) values (xx,xx,now()) on duplicate key update aa = values(aa),bb=value(bb)
- 批量替換更新
replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc)
該方式表是要有唯一主鍵的。原理跟A差不多。判斷主鍵,存在即更新,不存在則插入。 如果只更新其中1、2個字段的時候,不要用這個方法,否則會將其他的字段置空,或者執行前將values值填寫完整。
不過該方法有個坑,對於配置有主從服務器的時候,會導致從庫的自增主鍵與主庫的自增主鍵無法保持一致。
-
區別
a、replace into 操作本質是對重複的記錄先delete 後insert,如果更新的字段不全會將缺失的字段置爲缺省值。
b、insert into 則是隻update重複記錄,不會改變其它字段。
Mysql中批量更新的兩種方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.