共計 1408 個字符,預計需要花費 4 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這期內容當中丸趣 TV 小編將會給大家帶來有關 MySQL 中怎么不插入重復數據,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
1、insert ignore into
當插入數據時,如出現錯誤時,如重復數據,將不返回錯誤,只以警告形式返回。所以使用 ignore 請確保語句本身沒有問題,否則也會被忽略掉。例如:
INSERT IGNORE INTO user (name) VALUES (telami)
這種方法很簡便,但是有一種可能,就是插入不是因為重復數據報錯,而是因為其他原因報錯的,也同樣被忽略了~
2、on duplicate key update
當 primary 或者 unique 重復時,則執行 update 語句,如 update 后為無用語句,如 id=id,則同 1 功能相同,但錯誤不會被忽略掉。
例如,為了實現 name 重復的數據插入不報錯,可使用一下語句:
INSERT INTO user (name) VALUES (telami) ON duplicate KEY UPDATE idid = id
這種方法有個前提條件,就是,需要插入的約束,需要是主鍵或者唯一約束(在你的業務中那個要作為唯一的判斷就將那個字段設置為唯一約束也就是 unique key)。
3、insert hellip; select hellip; where not exist
根據 select 的條件判斷是否插入,可以不光通過 primary 和 unique 來判斷,也可通過其它條件。例如:
INSERT INTO user (name) SELECT telami FROM dual WHERE NOT EXISTS (SELECT id FROM user WHERE id = 1)
這種方法其實就是使用了 mysql 的一個臨時表的方式,但是里面使用到了子查詢,效率也會有一點點影響,如果能使用上面的就不使用這個。
4、replace into
如果存在 primary or unique 相同的記錄,則先刪除掉。再插入新記錄。
REPLACE INTO user SELECT 1, telami FROM books
這種方法就是不管原來有沒有相同的記錄,都會先刪除掉然后再插入。另外,關注公眾號 Java 技術棧,在后臺回復:面試,可以獲取我整理的 MySQL 面試題和答案。
實踐
選擇的是第二種方式
insert id= batchSaveUser parameterType= list insert into user (id,username,mobile_number) values foreach collection= list item= item index= index separator= , ( #{item.id}, #{item.username}, #{item.mobileNumber} ) /foreach ON duplicate KEY UPDATE idid = id /insert
這里用的是 Mybatis,批量插入的一個操作,mobile_number 已經加了唯一約束。這樣在批量插入時,如果存在手機號相同的話,是不會再插入了的。
上述就是丸趣 TV 小編為大家分享的 MySQL 中怎么不插入重復數據了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。
向 AI 問一下細節