最多見的方式就是爲字段設置主鍵或惟一索引,當插入重複數據時,拋出錯誤,程序終止,但這會給後續處理帶來麻煩,所以須要對插入語句作特殊處理,儘可能避開或忽略異常,下面我簡單介紹一下,感興趣的朋友能夠嘗試一下:數據庫
這裏爲了方便演示,我新建了一個user測試表,主要有id,username,sex,address這4個字段,其中主鍵爲id(自增),同時對username字段設置了惟一索引:測試
01 insert ignore into
即插入數據時,若是數據存在,則忽略這次插入,前提條件是插入的數據字段設置了主鍵或惟一索引,測試SQL語句以下,當插入本條數據時,MySQL數據庫會首先檢索已有數據(也就是idx_username索引),若是存在,則忽略本次插入,若是不存在,則正常插入數據:spa
02 on duplicate key update
即插入數據時,若是數據存在,則執行更新操做,前提條件同上,也是插入的數據字段設置了主鍵或惟一索引,測試SQL語句以下,當插入本條記錄時,MySQL數據庫會首先檢索已有數據(idx_username索引),若是存在,則執行update更新操做,若是不存在,則直接插入:索引
03 replace into
即插入數據時,若是數據存在,則刪除再插入,前提條件同上,插入的數據字段須要設置主鍵或惟一索引,測試SQL語句以下,當插入本條記錄時,MySQL數據庫會首先檢索已有數據(idx_username索引),若是存在,則先刪除舊數據,而後再插入,若是不存在,則直接插入:get
04 insert if not exists
即insert into … select … where not exist ... ,這種方式適合於插入的數據字段沒有設置主鍵或惟一索引,當插入一條數據時,首先判斷MySQL數據庫中是否存在這條數據,若是不存在,則正常插入,若是存在,則忽略:class
目前,就分享這種MySQL處理重複數據的方式吧,前3種方式適合字段設置了主鍵或惟一索引,最後一種方式則沒有此限制,只要你熟悉一下使用過程,很快就能掌握的。date