mysql妙用:批量插入記錄,遇到重複記錄則爲自動更新

在更新大量數據時可能同時遇到兩個問題:sql

  1. 若是每條更新執行一次sql性能很低,也容易形成阻塞;性能

  2. 批量更新時又有可能遇到主鍵重複的問題
    spa

使用 ON DUPLICATE KEY UPDATE 一條sql解決批量更新和主鍵重複問題(id爲主鍵)
code

INSERT INTO mytable(id,pid,ele,anim) 
VALUES (?,?,?,?),(?,?,?,?),(?,?,?,?)
ON DUPLICATE KEY UPDATE pid=VALUES(pid),ele=VALUES(ele)
//pid=VALUES(pid),ele=VALUES(ele) 表示出如今values中某列的id字段值與表中已有id字段值重複時,會更新對應記錄的這兩個字段

//還能夠指定其它值或進行運算:pid=pid+1,ele=ele-1

//由於這裏未指定列 anim,因此遇到重複id的列,表中該列的 anim字段不會更新

//若是某列做爲新記錄被插入,則受影響行的值爲1;若是表中原有的記錄被更新,則受影響行的值爲2

它不但對惟一主鍵有效,對複合主鍵一樣有效,複合主鍵設置:
table

ALTER TABLE mytable ADD(CONSTRAINT PRIMARY KEY(id,pid));

不過ON DUPLICATE KEY UPDATE只是MySQL的特有語法,並非SQL標準語法,不要亂用哦class

相關文章
相關標籤/搜索