Mysql中批量更新的兩種方式

  1. 批量插入並更新
    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)


  2. 批量替換更新
    replace into table (aa,bb,cc) values(xxx,xxx,xxx),(ooo,ooo,ooo),(ccc,ccc,ccc)

    該方式表是要有唯一主鍵的。原理跟A差不多。判斷主鍵,存在即更新,不存在則插入。 如果只更新其中1、2個字段的時候,不要用這個方法,否則會將其他的字段置空,或者執行前將values值填寫完整。

    不過該方法有個坑,對於配置有主從服務器的時候,會導致從庫的自增主鍵與主庫的自增主鍵無法保持一致。

  3. 區別

    a、replace into 操作本質是對重複的記錄先delete 後insert,如果更新的字段不全會將缺失的字段置爲缺省值。 

    b、insert into 則是隻update重複記錄,不會改變其它字段。

發佈了24 篇原創文章 · 獲贊 23 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章