日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL的insert ignore与replace into不同

發布時間:2024/4/13 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL的insert ignore与replace into不同 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前從來沒有接觸過replace into這個語法,但是卻看到很多人都在使用這個語法,并且應用在很多生產環境中,于是我也去學習了一下repalce into的用法。

關于replace

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

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

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

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

?

??REPLACE語句會返回一個數,來指示受影響的行的數目。該數是被刪除和被插入的行數的和
受影響的行數可以容易地確定是否REPLACE只添加了一行,或者是否REPLACE也替換了其它行:檢查該數是否為1(添加)或更大(替換)。

關于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了,媽媽再也不用擔心數據庫的頻繁刪寫操作。

參考資料

轉載于:https://www.cnblogs.com/conanwang/p/5888274.html

總結

以上是生活随笔為你收集整理的MySQL的insert ignore与replace into不同的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。