在更新大量數據時可能同時遇到兩個問題:sql
若是每條更新執行一次sql性能很低,也容易形成阻塞;性能
批量更新時又有可能遇到主鍵重複的問題
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