最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql批量插入數(shù)據(jù)時(shí)該如何解決重復(fù)問題詳解

 更新時(shí)間:2022年11月10日 10:09:28   作者:頭禿的程序員小王  
之前寫的代碼批量插入遇到了問題,原因是有重復(fù)的數(shù)據(jù)(主鍵或唯一索引沖突),所以插入失敗,下面這篇文章主要給大家介紹了關(guān)于Mysql批量插入數(shù)據(jù)時(shí)該如何解決重復(fù)問題的相關(guān)資料,需要的朋友可以參考下

前言

當(dāng)數(shù)據(jù)庫中存量數(shù)據(jù)較多時(shí),或者是在批量插入操作時(shí),很容易出現(xiàn)插入重復(fù)數(shù)據(jù)的問題。

一、三種方法

在 mysql 中,當(dāng)存在主鍵沖突或唯一鍵沖突的情況下,根據(jù)插入策略不同,一般有以下三種避免方法:

insert ignore into:若沒有則插入,若存在則忽略

replace into:若沒有則正常插入,若存在則先刪除后插入

insert into ... on duplicate key update:若沒有則正常插入,若存在則更新

注意,使用以上方法的前提是表中有一個(gè) PRIMARY KEY 或 UNIQUE 約束/索引,否則,使用以上三個(gè)語句沒有特殊意義,與使用單純的 INSERT INTO 效果相同。

測試表結(jié)構(gòu):

測試表數(shù)據(jù):

二、細(xì)節(jié)

2.1、insert ignore into

insert ignore 會(huì)根據(jù)主鍵或者唯一鍵判斷,忽略數(shù)據(jù)庫中已經(jīng)存在的數(shù)據(jù),若數(shù)據(jù)庫沒有該條數(shù)據(jù),就插入為新的數(shù)據(jù),跟普通的 insert into 一樣。若數(shù)據(jù)庫有該條數(shù)據(jù),就忽略這條插入語句,不執(zhí)行插入操作。

insert ignore into student(age) values (12),(13);

age=12的數(shù)據(jù)已存在,因此未插入(根據(jù)創(chuàng)建時(shí)間可得),age=13的數(shù)據(jù)不存在,因此成功插入

2.2 、insert into ... on duplicate key update

在 insert into 語句末尾指定 on duplicate key update,會(huì)根據(jù)主鍵或者唯一鍵判斷:若數(shù)據(jù)庫有該條數(shù)據(jù),則直接更新原數(shù)據(jù),相當(dāng)于 update,若數(shù)據(jù)庫沒有該條數(shù)據(jù),則插入為新的數(shù)據(jù),跟普通的 insert into 一樣。

insert into student(age) values (12),(13) 
ON DUPLICATE KEY UPDATE student.created_at = '2022-01-01 00:00:00';

age=12的記錄已存在,因此created_at字段被更新。age=13的記錄不存在,因此成功插入

2.3、replace into

 replace into student(age) values (12),(13);

age=12的記錄已存在,因此被刪除重新插入(由createdAt值可知)。age=13的記錄不存在,因此成功插入

replace into 會(huì)根據(jù)主鍵或者唯一鍵判斷:

  • 若表中已存在該數(shù)據(jù),則先刪除此行數(shù)據(jù),然后插入新的數(shù)據(jù),相當(dāng)于 delete + insert
  • 可能會(huì)丟失數(shù)據(jù)、主從服務(wù)器的 AUTO_INCREMENT 不一致。
  • 若表中不存在該數(shù)據(jù),則直接插入新數(shù)據(jù),跟普通的 insert into 一樣

三、總結(jié)

1)在主鍵沖突情況下,三種方法都可以使用

2)在唯一鍵沖突情況下,且有自增主鍵時(shí):三種方法都會(huì)出現(xiàn) AUTO_INCREMENT 不連續(xù)問題,且這種不連續(xù)不會(huì)同步更新到 slave 的 AUTO_INCREMENT。當(dāng) master 被 kill,且 slave 升級(jí)為 master 時(shí),就會(huì)出現(xiàn)主鍵沖突問題。(因?yàn)槭聞?wù)原因,即使沒有插入成功,也會(huì)占用一個(gè)自增id。row模式binlog下,主從的數(shù)據(jù)同步是一致的,主鍵也一致。有沒有影響取決于主從同步模式)

  • statement格式:binlog記錄的是實(shí)際執(zhí)行的sql語句
  • row格式:binlog記錄的是變化前后的數(shù)據(jù)(涉及所有列),形如update table_a set col1=value1, col2=value2 ... where col1=condition1 and col2=condition2 ...
  • mixed格式:默認(rèn)選擇statement格式,只在需要時(shí)改用row格式

3)replace into 方法可能會(huì)導(dǎo)致部分?jǐn)?shù)據(jù)丟失。

到此這篇關(guān)于Mysql批量插入數(shù)據(jù)時(shí)該如何解決重復(fù)問題的文章就介紹到這了,更多相關(guān)Mysql批量插入數(shù)據(jù)重復(fù)問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何給mysql數(shù)據(jù)庫重新命名(操作步驟)

    如何給mysql數(shù)據(jù)庫重新命名(操作步驟)

    這篇文章主要介紹了如何給mysql數(shù)據(jù)庫重新命名,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • MySql如何解決mysql沒有root用戶問題

    MySql如何解決mysql沒有root用戶問題

    文章主要描述了在MySQL中沒有root用戶的情況如何解決,首先,作者提到由于沒有root用戶,無法進(jìn)行后續(xù)的權(quán)限設(shè)置和操作,然后,作者詳細(xì)介紹了創(chuàng)建root用戶并賦予其所有權(quán)限的步驟,包括解決可能遇到的錯(cuò)誤,最后,作者總結(jié)了整個(gè)過程,并希望大家能夠從中受益
    2025-02-02
  • mysql存儲(chǔ)過程之返回多個(gè)值的方法示例

    mysql存儲(chǔ)過程之返回多個(gè)值的方法示例

    這篇文章主要介紹了mysql存儲(chǔ)過程之返回多個(gè)值的方法,結(jié)合實(shí)例形式分析了mysql存儲(chǔ)過程返回多個(gè)值的實(shí)現(xiàn)方法與PHP調(diào)用技巧,需要的朋友可以參考下
    2019-12-12
  • MySQL Packet for query is too large 問題及解決方法

    MySQL Packet for query is too large 問題及解決方法

    這篇文章主要介紹了MySQL Packet for query is too large 問題及解決方法,需要的朋友可以參考下
    2018-05-05
  • B-樹的插入過程介紹

    B-樹的插入過程介紹

    今天小編就為大家分享一篇關(guān)于B-樹的插入過程介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 揭開SQL中NULL的神秘面紗

    揭開SQL中NULL的神秘面紗

    表的字段默認(rèn)允許存放NULL值,這意味著,您在插入記錄或者更新記錄時(shí),可以不為該字段指定值,此時(shí)該字段將存儲(chǔ)NULL值,這篇文章將揭開SQL中NULL的神秘面紗。這個(gè)問題可能困擾著很多初級(jí)開發(fā)者
    2023-01-01
  • linux系統(tǒng)下安裝配置解壓版的MySQL數(shù)據(jù)庫圖解

    linux系統(tǒng)下安裝配置解壓版的MySQL數(shù)據(jù)庫圖解

    這篇文章主要介紹了linux系統(tǒng)下安裝配置解壓版的MySQL數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2017-12-12
  • 關(guān)于mysql數(shù)據(jù)庫格式化簡單介紹

    關(guān)于mysql數(shù)據(jù)庫格式化簡單介紹

    本文將介紹關(guān)于mysql數(shù)據(jù)庫格式化時(shí)需要注意的一些問題,需要的朋友可以參考下
    2012-11-11
  • SQL中where語句的用法及實(shí)例代碼(條件查詢)

    SQL中where語句的用法及實(shí)例代碼(條件查詢)

    WHERE如需有條件地從表中選取數(shù)據(jù),可將WHERE 子句添加到SELECT語句,下面這篇文章主要給大家介紹了關(guān)于SQL中where語句的用法及實(shí)例(條件查詢)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 如何用cmd連接Mysql數(shù)據(jù)庫

    如何用cmd連接Mysql數(shù)據(jù)庫

    如何用cmd連接Mysql數(shù)據(jù)庫,需要的朋友可以參考一下
    2013-03-03

最新評(píng)論

抚顺县| 凤山市| 民权县| 阿坝县| 高青县| 长顺县| 拉孜县| 三台县| 石狮市| 钟祥市| 疏勒县| 左贡县| 个旧市| 内江市| 毕节市| 宁乡县| 奉节县| 石屏县| 蓝田县| 乃东县| 天全县| 两当县| 堆龙德庆县| 曲阜市| 宣威市| 建始县| 呼图壁县| 平陆县| 鲜城| 观塘区| 禄丰县| 苍溪县| 丰台区| 都江堰市| 通江县| 伊通| 玉门市| 永州市| 朝阳市| 吉隆县| 昭平县|