0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL 批量插入不重復(fù)數(shù)據(jù)的解決方法

Android編程精選 ? 來源:JAVA葵花寶典 ? 作者:JAVA葵花寶典 ? 2021-07-02 15:28 ? 次閱讀

來源丨JAVA葵花寶典

知識這個東西,看來真的要溫故而知新,一直不用,都要忘記了

業(yè)務(wù)很簡單:需要批量插入一些數(shù)據(jù),數(shù)據(jù)來源可能是其他數(shù)據(jù)庫的表,也可能是一個外部excel的導(dǎo)入

那么問題來了,是不是每次插入之前都要查一遍,看看重不重復(fù),在代碼里篩選一下數(shù)據(jù),重復(fù)的就過濾掉呢?

向大數(shù)據(jù)數(shù)據(jù)庫中插入值時,還要判斷插入是否重復(fù),然后插入。如何提高效率

看來這個問題不止我一個人苦惱過。

解決的辦法有很多種,不同的場景解決方案也不一樣,數(shù)據(jù)量很小的情況下,怎么搞都行,但是數(shù)據(jù)量很大的時候,這就不是一個簡單的問題了。

幾百萬的數(shù)據(jù),不可能查出來,做去重處理

說一下我Google到的解決方案

1、insert ignore into

當插入數(shù)據(jù)時,如出現(xiàn)錯誤時,如重復(fù)數(shù)據(jù),將不返回錯誤,只以警告形式返回。所以使用ignore請確保語句本身沒有問題,否則也會被忽略掉。例如:

INSERT IGNORE INTO user (name) VALUES (‘telami’)

這種方法很簡便,但是有一種可能,就是插入不是因為重復(fù)數(shù)據(jù)報錯,而是因為其他原因報錯的,也同樣被忽略了~

2、on duplicate key update

當primary或者unique重復(fù)時,則執(zhí)行update語句,如update后為無用語句,如id=id,則同1功能相同,但錯誤不會被忽略掉。

例如,為了實現(xiàn)name重復(fù)的數(shù)據(jù)插入不報錯,可使用一下語句:

INSERT INTO user (name) VALUES (‘telami’) ON duplicate KEY UPDATE id = id

這種方法有個前提條件,就是,需要插入的約束,需要是主鍵或者唯一約束(在你的業(yè)務(wù)中那個要作為唯一的判斷就將那個字段設(shè)置為唯一約束也就是unique key)。

3、insert … select … where not exist

根據(jù)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

這種方法就是不管原來有沒有相同的記錄,都會先刪除掉然后再插入。

實踐

選擇的是第二種方式

pYYBAGDewGiAD4ryAAAloA9QPzg560.png

這里用的是Mybatis,批量插入的一個操作,mobile_number 已經(jīng)加了唯一約束。這樣在批量插入時,如果存在手機號相同的話,是不會再插入了的。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3752

    瀏覽量

    64236
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8856

    瀏覽量

    137222

原文標題:MySQL 批量插入:如何不插入重復(fù)數(shù)據(jù)?

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    激光打標機紅光與激光不重合:原因及解決方案

    激光打標機紅光和激光不在一個位置的問題可能由多種原因?qū)е?。以下是一些可能的原因?b class='flag-5'>解決方法:1.激光器光路調(diào)整不當:激光器光路調(diào)整不當會導(dǎo)致激光束偏移,從而使紅光與激光不重合。解決方法是重新調(diào)整激光器
    的頭像 發(fā)表于 03-09 16:35 ?1006次閱讀
    激光打標機紅光與激光<b class='flag-5'>不重</b>合:原因及解決方案

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例!

    MySQL密碼忘記了怎么辦?MySQL密碼快速重置方法步驟命令示例! MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),如果你忘記了
    的頭像 發(fā)表于 01-12 16:06 ?706次閱讀

    導(dǎo)致MySQL索引失效的情況以及相應(yīng)的解決方法

    導(dǎo)致MySQL索引失效的情況以及相應(yīng)的解決方法? MySQL索引的目的是提高查詢效率,但有些情況下索引可能會失效,導(dǎo)致查詢變慢或效果不如預(yù)期。下面將詳細介紹導(dǎo)致MySQL索引失效的情況
    的頭像 發(fā)表于 12-28 10:01 ?722次閱讀

    mysql數(shù)據(jù)庫基礎(chǔ)命令

    MySQL是一個流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),經(jīng)常用于存儲、管理和操作數(shù)據(jù)。在本文中,我們將詳細介紹MySQL的基礎(chǔ)命令,并提供與每個命令相關(guān)的詳細解釋。 登錄
    的頭像 發(fā)表于 12-06 10:56 ?533次閱讀

    mysql備份還原哪些方法

    MySQL是一個開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),備份和還原是保證數(shù)據(jù)安全性和可恢復(fù)性的重要措施。本文將詳細介紹MySQL備份和還原的方法,包括物
    的頭像 發(fā)表于 11-23 14:35 ?953次閱讀

    mysql數(shù)據(jù)庫備份與還原

    MySQL是一種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),用于存儲和管理數(shù)據(jù)。備份和還原數(shù)據(jù)庫是非常重要的操作,可以保護數(shù)據(jù)免受丟失或損壞的影響。本文將詳
    的頭像 發(fā)表于 11-23 14:32 ?1125次閱讀

    MySQL性能優(yōu)化方法

    MySQL 性能優(yōu)化是一項關(guān)鍵的任務(wù),可以提高數(shù)據(jù)庫的運行速度和效率。以下是一些優(yōu)化方法,包括具體代碼和詳細優(yōu)化方案。
    的頭像 發(fā)表于 11-22 09:59 ?534次閱讀

    python去除list中重復(fù)數(shù)據(jù)

    Python是一個強大的編程語言,提供了許多解決問題的方法和功能。其中一個常見的問題是如何去除列表中的重復(fù)數(shù)據(jù)。在本文中,我們將詳細介紹Python中去除列表中重復(fù)數(shù)據(jù)的幾種方法,包括
    的頭像 發(fā)表于 11-21 15:49 ?1514次閱讀

    python處理重復(fù)值的方法

    處理重復(fù)值是數(shù)據(jù)處理中常見的任務(wù)之一。在Python中,有幾種有效的方法可以處理重復(fù)值,包括使用集合、字典和pandas庫等。 使用集合 集合數(shù)據(jù)
    的頭像 發(fā)表于 11-21 15:47 ?1235次閱讀

    MySQL數(shù)據(jù)庫基礎(chǔ)知識

    MySQL 是一種開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它是目前最流行的數(shù)據(jù)庫之一。MySQL 提供了一種結(jié)構(gòu)化的方法來管理大量的
    的頭像 發(fā)表于 11-21 11:09 ?932次閱讀

    mysql數(shù)據(jù)庫增刪改查基本語句

    MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),提供了豐富的功能和語法,來支持數(shù)據(jù)的增刪改查。在本文中,將詳細介紹MySQL數(shù)據(jù)庫的增、刪、改、查基本
    的頭像 發(fā)表于 11-16 16:36 ?886次閱讀

    mysql數(shù)據(jù)庫的增刪改查sql語句

    SQL語句,以幫助讀者全面了解MySQL的基本操作。 一、增加數(shù)據(jù)MySQL數(shù)據(jù)庫中,我們可以使用INSERT語句來向表中插入新的
    的頭像 發(fā)表于 11-16 15:41 ?1120次閱讀

    mysql增刪改查語句以及常用方法

    MySQL是一種熱門的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),廣泛用于各種Web應(yīng)用程序和企業(yè)級應(yīng)用程序中。本文將詳細介紹MySQL中的增刪改查語句以及常用方法。 一、增加
    的頭像 發(fā)表于 11-16 15:36 ?1008次閱讀

    mysql是一個什么類型的數(shù)據(jù)

    強、易于使用和管理。在本文中,我們將詳盡、詳實、細致地介紹MySQL的功能、優(yōu)勢、架構(gòu)、語法等方面。 一、MySQL的功能: 數(shù)據(jù)庫管理:MySQL具備創(chuàng)建和管理
    的頭像 發(fā)表于 11-16 14:43 ?1649次閱讀

    mysql主從復(fù)制數(shù)據(jù)不一致怎么辦

    不一致的原因和解決方法。 一、MySQL主從復(fù)制數(shù)據(jù)不一致的原因 網(wǎng)絡(luò)延遲:主從之間的網(wǎng)絡(luò)延遲導(dǎo)致從庫在主庫執(zhí)行完并提交的操作之前拉取到的binlog可能不是最新的,從而導(dǎo)致數(shù)據(jù)不一致
    的頭像 發(fā)表于 11-16 14:35 ?2232次閱讀