您好,登錄后才能下訂單哦!
本篇文章為大家展示了MYSQL Replace into和Insert into duplicate key update的對比分析 ,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
有些同學對MYSQL中兩個看似相同功能的語句,在使用中感到疑惑,到底是功能重復還是各有各自的特點,我們需要弄清楚,并在合適的場合對他們加以利用。
我們通過幾個操作來詳細了解一下他們的使用方式和異同點
情況一, 判斷當前ID 是否存在 ID = 1 的記錄,如果有就更新數據,如果沒有則插入記錄
這里如果我們單純使用UPDATE 語句,則會比較麻煩,首先我們需要判斷是否有 ID =1 的記錄,并且根據判斷后的結果進行下一步的操作。
使用 replace 功能就可以滿足上面的要求
數據已經被直接更改了,其實說準確一點,不是更新而是兩個操作,細心的同學應該已經發現了上面圖中的是 2 rows affected ,本來是一條數據,怎么蹦出來兩條了。(注意2 rows affected)
Replace into 語句主要是通過主鍵和唯一索引來判斷數據的重復性,繼而 1 先刪除數據,2 在插入數據的套路,實際是一條語句,完成了判斷,刪除,插入的操作,這樣的設計可以免除某些程序對表中數據處理的特殊需求。
可能熟悉MYSQL 的同學馬上又會問到,不是還有INSERT DUPLICATE KEY 的語句嗎,他和 replace into 語句又有什么不同?
需求2 , 現在需要在test 表中插入數據,如果不重復就批量插入數據,如果重復,就更新其中某個值
很明顯,操作后重復的數據被更新,而沒有重復的數據被插入,那他同學所問的異同點在哪里?
1 replace into 是否可以批量插入數據,insert duplicate key 都是可以的,
2 repace into 和 insert duplicate key 都可以更新數據
3 replace into 后面不可以接 select 語句 不可以, insert into duplicate key 是可以接入select 語句的 ,這在兩條語句在適用的環境上有了明顯的分割。
4 對數據庫表的操作不同,一個是 delete , insert ,一個僅僅是 insert update ,這在數據庫的物理操作層面也是根本的不同
最關鍵的一點不同是是對自增鍵的處理上,如果我們不指定自增主鍵的數據,(這里假設我們使用的是通過唯一索引進行判斷,而不是自增主鍵),那結果就大大的不同了,replace into 會刪除重復的行,在插入一行新的,而 insert into duplicate key 則是不會改變原有的自增主鍵,而是直接UPDATE,這在基于自增主鍵在應用中使用時有根本性的不同,(ORACLE 的親們可能不大理解這個事情,因為ORACLE 本身在設計之初就沒有自增主鍵,底層數據存儲設計不同,造成ORACLE 理解 SQL SERVER MYSQL 某些數據表設計和處理上困難,同理SQL SERVER MYSQL 要理解 ORACLE 在某些數據表設計也有障礙),言歸正傳MYSQL 的程序員在使用這兩條語句我總結了相關使用的場景。
1 少數據量非大批量數據的更新,并且整行數據都要變化的情況下,可以采用REPLACE INTO ,并且如果主鍵和應用有緊密聯系,需要指定主鍵值,否則原數據行主鍵消失,這在某些與應用中是有用的,因為就是不要原有的主鍵,要一條新的ID包含新的值
2 大批量數據更新和插入,兩張或多張表,合并插入到一張表,并且去重,或者更新某個字段的VALUE 需要使用 INSERT INTO duplicate key update 語句
如果同樣大數據量的情況下,insert into duplicate key update 語句的性能要比 replace into 性能要好,兩次操作和 一次操作對操作性能的影響也是不言而喻。
注:測試中,5.X 中在 insert into duplicate key update 中關于自增主鍵的某些小問題,貌似在8.0上已經消失了,具體還的在測試。看來8.0 的確是值得期待和擁有的。
上述內容就是MYSQL Replace into和Insert into duplicate key update的對比分析 ,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。