{eval=Array;=+count(Array);}
最常見的方式就是為字段設置主鍵或唯一索引,當插入重復數據時,拋出錯誤,程序終止,但這會給后續處理帶來麻煩,因此需要對插入語句做特殊處理,盡量避開或忽略異常,下面我簡單介紹一下,感興趣的朋友可以嘗試一下:
這里為了方便演示,我新建了一個user測試表,主要有id,username,sex,address這4個字段,其中主鍵為id(自增),同時對username字段設置了唯一索引:
即插入數據時,如果數據存在,則忽略此次插入,前提條件是插入的數據字段設置了主鍵或唯一索引,測試SQL語句如下,當插入本條數據時,MySQL數據庫會首先檢索已有數據(也就是idx_username索引),如果存在,則忽略本次插入,如果不存在,則正常插入數據:
即插入數據時,如果數據存在,則執行更新操作,前提條件同上,也是插入的數據字段設置了主鍵或唯一索引,測試SQL語句如下,當插入本條記錄時,MySQL數據庫會首先檢索已有數據(idx_username索引),如果存在,則執行update更新操作,如果不存在,則直接插入:
即插入數據時,如果數據存在,則刪除再插入,前提條件同上,插入的數據字段需要設置主鍵或唯一索引,測試SQL語句如下,當插入本條記錄時,MySQL數據庫會首先檢索已有數據(idx_username索引),如果存在,則先刪除舊數據,然后再插入,如果不存在,則直接插入:
即insert into … select … where not exist ... ,這種方式適合于插入的數據字段沒有設置主鍵或唯一索引,當插入一條數據時,首先判斷MySQL數據庫中是否存在這條數據,如果不存在,則正常插入,如果存在,則忽略:
目前,就分享這4種MySQL處理重復數據的方式吧,前3種方式適合字段設置了主鍵或唯一索引,最后一種方式則沒有此限制,只要你熟悉一下使用過程,很快就能掌握的,網上也有相關資料和教程,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。
在MySQL中大概有四種方式可以防止數據的重復插入,我們以如下user_basic_infor表為例,分別簡單介紹一下這幾種方式,user_basic_infor的建表SQL語句如下:
如上,在 user_basic_infor表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保數據具的唯一性,為避免重復插入記錄可以使用 insert ignore into 語法,如下:
當使用 ignore 插入數據時,如果出現錯誤,如重復記錄,將不返回錯誤,僅以警告形式返回。因此使用 ignore時,請確保SQL語句本身沒有問題,否則也將會被忽略掉。
同樣,在user_basic_infor表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保數據具的唯一性,為避免重復插入記錄也可以使用 on duplicate key update 語法,如下:
如果在 insert 語句末尾指定了on duplicate key update ……,并且插入行后會導致在主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)中出現重復值時,則在出現重復值的行執行
update ,如果不會導致唯一值列重復的問題,則插入該新行。
同樣,在user_basic_infor表中使用主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)確保數據具的唯一性,為避免重復插入記錄也可以使用replace into 語法,如下:
replace 嘗試把新行插入到表中,當如果插入數據的主鍵索引(PRIMARY KEY)以及唯一索引(UNIQUE KEY)出現重復,導致報錯而造成插入失敗時,會先從表中刪除原有涉及到重復的行,然后再次嘗試把新行插入到表中,這種方法就是無論原來有沒有相同的記錄,都會先刪除再執行插入。
除此之外,在 MySQL 中,插入一條記錄,我們可以先檢查這條記錄是否已經存在,當記錄不存在時再執行插入操作,這樣可以不只通過主鍵索引(PRIMARY KEY)或者唯一索引(UNIQUE KEY)來判斷,也可通過其它條件,如下:
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答