一个少妇满足三个老头在线观看,锕锕锕锕锕锕锕好痛视频,亚洲人成网站在线播放2019

<center id="pt2l2"></center>
<tr id="pt2l2"></tr>
  • <big id="pt2l2"></big>

        Mysql批量插入數據時該如何解決重復問題詳解

        前言

        當數據庫中存量數據較多時,或者是在批量插入操作時,很容易出現插入重復數據的問題。

        一、三種方法

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

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

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

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

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

        測試表結構:

        測試表數據:

        二、細節

        2.1、insert ignore into

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

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

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

        2.2 、insert into ... on duplicate key update

        在 insert into 語句末尾指定 on duplicate key update,會根據主鍵或者唯一鍵判斷:若數據庫有該條數據,則直接更新原數據,相當于 update,若數據庫沒有該條數據,則插入為新的數據,跟普通的 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 會根據主鍵或者唯一鍵判斷:

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

        三、總結

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

        2)在唯一鍵沖突情況下,且有自增主鍵時:三種方法都會出現 AUTO_INCREMENT 不連續問題,且這種不連續不會同步更新到 slave 的 AUTO_INCREMENT。當 master 被 kill,且 slave 升級為 master 時,就會出現主鍵沖突問題。(因為事務原因,即使沒有插入成功,也會占用一個自增id。row模式binlog下,主從的數據同步是一致的,主鍵也一致。有沒有影響取決于主從同步模式)

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

        3)replace into?方法可能會導致部分數據丟失。

        到此這篇關于Mysql批量插入數據時該如何解決重復問題的文章就介紹到這了,更多相關Mysql批量插入數據重復問題內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

        若文章對您有幫助,幫忙點個贊!

        0
        0
        發布時間 2022-11-14 06:10:00
        0 條回復(回復會通過微信通知作者)
        點擊加載更多評論
        登錄 后再進行評論
        (微信掃碼即可登錄,無需注冊)
        一个少妇满足三个老头在线观看,锕锕锕锕锕锕锕好痛视频,亚洲人成网站在线播放2019