4種避免重復插入MySQL數據

MySql 在存在主鍵沖突或唯一鍵沖突的情況下,根據插入方式,一般有以下四種插入方式避免錯誤。

insert ignore
insert on duplicate key update
replace into
insert … select … where not exist ……

我們在 MySQL數據庫進行表設計時,為了防止表中存在重復數據,我們通常會設置指定的字段為 主鍵索引(PRIMARY KEY)或者 唯一索引(UNIQUE KEY)索引來保證數據的唯一性。

如果我們設置了唯一索引,當在寫入重復數據時,SQL 語句將無法執行成功,并拋出錯誤。

因此,我們通常在進行 MySQL數據庫寫入數據操作時,會考慮如何避免數據的重復寫入或者因重復數據寫入導致運行出錯,拋出異常。

MySQL數據庫中通常使用以下4種方式可以防止數據的重復寫入。本文我們將以 **user_basic_infor **表為例(建表SQL語句如下),分別分享如何使用這幾種方式避免重復數據的寫入。

MySQL數據庫中避免寫入重復數據的4種方式

一、insert ignore into

如上建表語句,在 user_basic_infor表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保數據具的唯一性,為避免重復寫入數據可以使用 **insert ignore into **語法,如下:

MySQL數據庫中避免寫入重復數據的4種方式

當使用 **insert ****ignore **寫入數據時,如果出現錯誤,如重復數據,將不返回錯誤,僅以警告形式返回。也就是 insert ****ignore 會忽略數據庫中已經存在的數據,如果寫入新數據后不會導致重復,那么寫入新的數據,如果寫入新數據后會導致重復,那么就跳過這行新數據。

需要注意的是,使用 insert **ignore **時,請確保SQL語句本身沒有問題,否則也將會被忽略掉。

二、 insert on duplicate key update

同樣,在 user_basic_infor表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保數據具的唯一性,為避免重復寫入數據也可以使用 **on duplicate key update **語法,如下:

MySQL數據庫中避免寫入重復數據的4種方式

如果在 insert 語句末尾指定了on duplicate key update ……,并且寫入行后將導致在主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)中出現重復值時,則對重復值所在的行執行**update **,如果不會導致唯一值列重復的問題,則寫入該新行。

三、 replace into

同樣,在 user_basic_infor表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保數據具的唯一性,為避免重復寫入數據也可以使用replace into 語法,如下:

MySQL數據庫中避免寫入重復數據的4種方式

**replace **嘗試把新行寫入到表中,當如果寫入數據的主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)出現重復,導致報錯而造成寫入失敗時,會先從表中刪除原有涉及到重復的行,然后再次嘗試把新行寫入到表中,這種方法就是無論原來有沒有相同的數據,都會先刪除再執行寫入。

四、 insert … select … where not exist ……

除此之外,在 MySQL數據庫中,寫入一條數據,我們可以先檢查這條數據是否已經存在,當數據不存在時再執行寫入操作,這樣可以不只通過主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)來判斷,也可通過其它條件,如下:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容