mysql中多種插入數據的語句


摘抄自:https://yjclsx.blog.csdn.net/article/details/83898545

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。

(3)都支持批量更新,當插入的多條數據中有沖突時,會更新其中沖突的那幾條。例如 replace into table (col_1,col_2) values ('v1','v2'),('v3','v4'),('v5','v6'); 和 insert into table (col_1,col_2) values ('v1','v2'),('v3','v4'),('v5','v6') on duplicate key update col_1=VALUES(col_1),col_2=VALUES(col_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 (col_1,col_2) values ('v1','v2'),('v3','v4'),('v5','v6');

這個效果提升地很明顯,以前地區表有幾萬條數據,一條條insert要幾分鍾,用了批量插入values,瞬間就完成了!

2、刪除MySQL的索引,有索引的存在,插入速度會受很大的影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM