1. 程式人生 > >mysql中多種插入資料的語句

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)原創文章,如若轉載請標明出處,謝謝!