mysql中多種插入資料的語句
此為博主(yjclsx)原創文章,如若轉載請標明出處,謝謝!
mysql中常用的三種插入資料的語句
insert into表示插入資料,資料庫會檢查主鍵,如果出現重複會報錯;
replace into表示插入替換資料,需求表中有PrimaryKey,或者unique索引,如果資料庫已經存在資料,則用新資料替換,如果沒有資料效果則和insert into一樣;
insert ignore into表示如果已經存在相同的記錄,比如主鍵或者唯一性欄位衝突,則忽略當前新資料;
還有一種和replace into功能類似的語句:insert into ... on duplicate key update,他們的區別如下。
Replace into與Insert into ... on duplicate key update的區別
相同點:
(1)沒有存在衝突的時候,replace into與insert into ... on duplicate key update相同,就是插入一條新的資料,返回的影響行數是1。
(2)存在衝突的時候,都會用新資料替換老資料,返回的影響行數是2。
不同點:
存在衝突的時候,replace into是delete老記錄,然後錄入新的記錄,所以原有的所有記錄會被清除,這個時候,如果replace into語句的欄位不全的話,有些原有的欄位的值會被自動填充為預設值,
同時AUTO_INCREMENT的主鍵會自動+1。
而insert into ... on duplicate key update則只執行update標記之後的sql,從表象上來看相當於一個簡單的update語句,所以他保留了所有未修改的欄位的舊值。
從底層執行效率上來講,replace into要比insert into ... on duplicate key update效率要高,但是在寫replace into的時候,欄位要寫全,防止老的欄位資料被刪除。
在實際工作中,經常會需要saveOrUpdate的操作,這時候通常使用的是insert into ... on duplicate key update,以保留未修改的資料。
提高插入效能
注意,當插入的資料量很大時,為了提高插入的效能:
1、可以批量插入VALUES,就是一個values跟很多條資料,每條資料用英文逗號隔開,最後一條才用分號,而不是每一次插入都是一條資料。
如:insert into table (col1,col2) values ('v1','v2'),('v3','v4'),('v5','v6');
這個效果提升地很明顯,以前地區表有幾萬條資料,一條條insert要幾分鐘,用了批量插入values,瞬間就完成了!
2、刪除MySQL的索引,有索引的存在,插入速度會受很大的影響。
此為博主(yjclsx)原創文章,如若轉載請標明出處,謝謝!