mysql的 insert into ... on duplicate key ... 只能插入不能update的原因是因為:
第一個字段必須是唯一索引或 unique 主鍵,
第一個字段必須是唯一索引或 unique 主鍵,
第一個字段必須是唯一索引或 unique 主鍵,否則執行就就只會insert 而不會執行update。
mysql 有就插入沒有就更新 on DUPLICATE key update批量更新
mysql有個批量更新的方法,mssql則無此命令用法,mysql的這個方法可以用來批量更新,更為強大的是:如果參數已存在則更新,如果數據庫裡沒有這個參數就插入新的。
insert into ...on duplicate key update批量更新
insert into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);
舉例
insert into xinhuazidian (a, b, c) VALUES ('aaa','bbb','111cn.net'), ('aaa2','bbb2','m.111cn.net') on DUPLICATE key update b=VALUES(b), c=VALUES(c)
判斷字段a,字段a必須是唯一索引或 unique 主鍵,有則update,沒有就insert,更新的是 on DUPLICATE key update 後面設置的b字段和c字段。
使用該語法可在插入記錄的時候先判斷記錄是否存在,如果不存在則插入,否則更新,很方便,無需執行兩條SQL
INSERT INTO osc_visit_stats(stat_date,type,id,view_count) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE view_count=view_count+?
-- osc_visit_stats 表有復合主鍵 (stat_date,type,id)
多字段更新
INSERT INTO osc_space_visit_records(space,user,visit_count,ip,visit_time) VALUES(?,?,?,?,?) ON DUPLICATE KEY UPDATE visit_count=visit_count+1,ip=?,visit_time=NOW()
愛死mysql這個批量更新的方法了,原本多行執行的代碼現在一條代碼就搞定了並且效率槓槓滴。