萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> MySQL的insert ignore與replace into的對比

MySQL的insert ignore與replace into的對比

在mysql中insert是保存數據了,那麼很多的朋友對於MySQL的insert ignore與replace into 區別不是很了解了,下文整理了一篇文章大家一起來看看。


關於replace

一句話:正常情況下表中有PRIMARY KEY或UNIQUE索引,新數據會替換老的數據。沒有老數據則insert該數據。

REPLACE的運行與INSERT很相像。只有一點除外,如果表中的一個舊記錄與一個用於PRIMARY KEY或一個UNIQUE索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。使用REPLACE相當於對原有的數據(在PRIMARY KEY或UNIQUE索引下有值的數據)進行delete操作,然後再insert操作。為了能夠使用REPLACE,您必須同時擁有表的INSERT和DELETE權限。

除非表有一個PRIMARY KEY或UNIQUE索引,否則,使用一個REPLACE語句沒有意義。該語句會與INSERT相同,因為沒有索引被用於確定是否新行復制了其它的行。

replace的使用一般是:只想對數據在數據庫中保存一份,不想出現重復的數據(重復的主鍵、唯一索引),因為重復的數據不是我們想要的,會給業務邏輯帶來麻煩。但是又要更新一些字段為最新的值,比如最後的檢查時間、任務的結果。

關於insert ignore

一句話:忽略執行insert語句出現的錯誤,不會忽略語法問題,但是忽略主鍵存在的情況。

如果沒有ignore關鍵字,那麼在insert數據到一個表(在UNIQUE索引或PRIMARY KEY有相同值)中,這時會出現錯誤,語句執行失敗。但是使用了ignore關鍵字後,不會出現這個錯誤,並且新數據不會被插入到數據表中。

使用場景:比如一個多線程的插入數據表,為了不讓多個線程向表中插入相同的數據,可以使用insert ignore來忽略重復的數據。有比如,你的程序down了,需要重新運行,那麼會重新拉取數據再insert到數據庫中,這個時候可能會存在重復的數據導致錯誤,ignore就可以解決這個問題。

兩者的一些聯系區別

聯系:

不想向數據表中插入相同的主鍵、unique索引時,可以使用replace或insert ignore,來避免重復的數據。

區別:

replace相當於delete然後insert,會有對數據進行寫的過程。
insert ignore會忽略已經存在主鍵或unique索引的數據,而不會有數據的修改。

使用場景:

如果不需要對數據進行更新值,那麼推薦使用insert ignore,比如:多線程的插入相同的數據。
如果需要對數據進行更新最新的值,那麼使用replace,比如:任務的結果,最後的更新時間。
後話:自從知道了有insert ignore,我再也不會一股勁的使用replace了,媽媽再也不用擔心數據庫的頻繁刪寫操作。

copyright © 萬盛學電腦網 all rights reserved