MySql批量插入時(shí)股冗,如何不插入重復(fù)的數(shù)據(jù)

溫故而知新

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

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

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

看來這個(gè)問題不止我一個(gè)人苦惱過。

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

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

說一下我Google到的解決方案

1、insert ignore into

當(dāng)插入數(shù)據(jù)時(shí)烘跺,如出現(xiàn)錯(cuò)誤時(shí)湘纵,如重復(fù)數(shù)據(jù),將不返回錯(cuò)誤滤淳,只以警告形式返回梧喷。所以使用ignore請確保語句本身沒有問題,否則也會(huì)被忽略掉。例如:

INSERT IGNORE INTO user (name) VALUES ('telami') 

這種方法很簡便铺敌,但是有一種可能汇歹,就是插入不是因?yàn)橹貜?fù)數(shù)據(jù)報(bào)錯(cuò),而是因?yàn)槠渌驁?bào)錯(cuò)的偿凭,也同樣被忽略了~

2产弹、on duplicate key update

當(dāng)primary或者unique重復(fù)時(shí),則執(zhí)行update語句弯囊,如update后為無用語句痰哨,如id=id,則同1功能相同匾嘱,但錯(cuò)誤不會(huì)被忽略掉斤斧。

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

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

這種方法有個(gè)前提條件撬讽,就是,需要插入的約束悬垃,需要是主鍵或者唯一約束(在你的業(yè)務(wù)中那個(gè)要作為唯一的判斷就將那個(gè)字段設(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) 

這種方法其實(shí)就是使用了mysql的一個(gè)臨時(shí)表的方式趟佃,但是里面使用到了子查詢,效率也會(huì)有一點(diǎn)點(diǎn)影響昧捷,如果能使用上面的就不使用這個(gè)闲昭。

4、replace into
如果存在primary or unique相同的記錄靡挥,則先刪除掉序矩。再插入新記錄。

REPLACE INTO user SELECT 1, 'telami' FROM books 

這種方法就是不管原來有沒有相同的記錄跋破,都會(huì)先刪除掉然后再插入簸淀。

實(shí)踐
選擇的是第二種方式

<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 id = id    </insert>

這里用的是Mybatis,批量插入的一個(gè)操作毒返,mobile_number已經(jīng)加了唯一約束租幕。這樣在批量插入時(shí),如果存在手機(jī)號相同的話拧簸,是不會(huì)再插入了的劲绪。

來源:http://www.telami.cn/2018/when-mysql-batch-inserts-and-how-to-not-insert-duplicate-data/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贾富,更是在濱河造成了極大的恐慌歉眷,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颤枪,死亡現(xiàn)場離奇詭異汗捡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)汇鞭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門凉唐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人霍骄,你說我怎么就攤上這事台囱。” “怎么了读整?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵簿训,是天一觀的道長。 經(jīng)常有香客問我米间,道長强品,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任屈糊,我火速辦了婚禮的榛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逻锐。我一直安慰自己夫晌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布昧诱。 她就那樣靜靜地躺著晓淀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盏档。 梳的紋絲不亂的頭發(fā)上凶掰,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音蜈亩,去河邊找鬼懦窘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛勺拣,可吹牛的內(nèi)容都是我干的奶赠。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼药有,長吁一口氣:“原來是場噩夢啊……” “哼毅戈!你這毒婦竟也來了苹丸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤苇经,失蹤者是張志新(化名)和其女友劉穎赘理,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扇单,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡商模,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜘澜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片施流。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鄙信,靈堂內(nèi)的尸體忽然破棺而出瞪醋,到底是詐尸還是另有隱情,我是刑警寧澤装诡,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布银受,位于F島的核電站,受9級特大地震影響鸦采,放射性物質(zhì)發(fā)生泄漏宾巍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一渔伯、第九天 我趴在偏房一處隱蔽的房頂上張望顶霞。 院中可真熱鬧,春花似錦锣吼、人聲如沸确丢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至褂始,卻和暖如春诸典,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崎苗。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工狐粱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胆数。 一個(gè)月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓肌蜻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親必尼。 傳聞我的和親對象是個(gè)殘疾皇子蒋搜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容