歐媚媚
最常見的方式就是為字段設置主鍵或唯一索引,當插入重複數據時,拋出錯誤,程序終止,但這會給後續處理帶來麻煩,因此需要對插入語句做特殊處理,儘量避開或忽略異常,下面我簡單介紹一下,感興趣的朋友可以嘗試一下:
這裡為了方便演示,我新建了一個user測試表,主要有id,username,sex,address這4個字段,其中主鍵為id(自增),同時對username字段設置了唯一索引:
01
insert ignore into
即插入數據時,如果數據存在,則忽略此次插入,前提條件是插入的數據字段設置了主鍵或唯一索引,測試SQL語句如下,當插入本條數據時,MySQL數據庫會首先檢索已有數據(也就是idx_username索引),如果存在,則忽略本次插入,如果不存在,則正常插入數據:
02
on duplicate key update
即插入數據時,如果數據存在,則執行更新操作,前提條件同上,也是插入的數據字段設置了主鍵或唯一索引,測試SQL語句如下,當插入本條記錄時,MySQL數據庫會首先檢索已有數據(idx_username索引),如果存在,則執行update更新操作,如果不存在,則直接插入:
03
replace into
即插入數據時,如果數據存在,則刪除再插入,前提條件同上,插入的數據字段需要設置主鍵或唯一索引,測試SQL語句如下,當插入本條記錄時,MySQL數據庫會首先檢索已有數據(idx_username索引),如果存在,則先刪除舊數據,然後再插入,如果不存在,則直接插入:
04
insert if not exists
即insert into … select … where not exist ... ,這種方式適合於插入的數據字段沒有設置主鍵或唯一索引,當插入一條數據時,首先判斷MySQL數據庫中是否存在這條數據,如果不存在,則正常插入,如果存在,則忽略:
目前,就分享這4種MySQL處理重複數據的方式吧,前3種方式適合字段設置了主鍵或唯一索引,最後一種方式則沒有此限制,只要你熟悉一下使用過程,很快就能掌握的,網上也有相關資料和教程,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
小小猿愛嘻嘻
MySQL數據庫中避免重複數據插入
在數據庫中已經存在重複數據 ,並且數據量很大 的時候,在修改sql語句在插入時 避免重複插入,可以有以下方法。
設置唯一索引
使用ignore或者REPLACE INTO 或者ON DUPLICATE KEY UPDATE
on duplicate key update
如果數據存在會觸發更新操作 執行後面語句的update
INSERT INTO tb_table(a,b,c) VALUE('1','bbb','ccc') ON DUPLICATE KEY UPDATE b= 'bbb',c='ccc'ON DUPLICATE KEY UPDATE 之後的語句不是條件判斷 條件的判斷會根據你的唯一索引來判斷觸發update之後會執行 UPDATE之後的語句進行更新如果update之後寫的是條件判斷的話 就會出現只能插入無法更新的操作
replace into
如果數據存在就刪除再插入
REPLACE INTO `student`(`name`, `age`) VALUES('Jack', 18);insert ignore into
如果插入時 數據存在則忽略此次插入數據
INSERT IGNORE INTO `student`(`name`, `age`) VALUES('Jack', 18);沒有設置唯一索引
但是當你的數據庫中數據存在重複,重複字段並沒有設置唯一索引或者主鍵的時候,
上面的方法是無法使用的,這種情況可以使用
insert if not exists
insert if not existsINSERT INTO TABLE (field1, field2, fieldn) SELECT 'field1','field2','fieldn'FROM 表 WHERENOT EXISTS (SELECT * FROM 表名 WHERE 字段= ?)月下聽風雨
方法一:使用ignore關鍵字
如果是用主鍵primary或者唯一索引unique區分了記錄的唯一性,避免重複插入記錄可以使用:
複製代碼 代碼如下:
INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('[email protected]', '99999', '9999');
這樣當有重複記錄就會忽略,執行後返回數字0