溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL數(shù)據(jù)庫中怎么避免寫入重復數(shù)據(jù)

發(fā)布時間:2021-07-13 16:05:06 來源:億速云 閱讀:1025 作者:Leah 欄目:數(shù)據(jù)庫

MySQL數(shù)據(jù)庫中怎么避免寫入重復數(shù)據(jù),很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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

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

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

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

MySQL數(shù)據(jù)庫中怎么避免寫入重復數(shù)據(jù)

insert ignore into

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

MySQL數(shù)據(jù)庫中怎么避免寫入重復數(shù)據(jù)

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

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

on duplicate key update

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

MySQL數(shù)據(jù)庫中怎么避免寫入重復數(shù)據(jù)

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

replace into

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

MySQL數(shù)據(jù)庫中怎么避免寫入重復數(shù)據(jù)

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

insert … select … where not exist ……

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

MySQL數(shù)據(jù)庫中怎么避免寫入重復數(shù)據(jù)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI