欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年06月22日 10:23:26   作者:DT辰白  
Mysql插入不重復(fù)的數(shù)據(jù),當(dāng)大數(shù)據(jù)量的數(shù)據(jù)需要插入值時(shí),要判斷插入是否重復(fù),然后再插入,那么如何提高效率,本文就詳細(xì)的介紹一下,感興趣的可以了解一下

前言

Mysql插入不重復(fù)的數(shù)據(jù),當(dāng)大數(shù)據(jù)量的數(shù)據(jù)需要插入值時(shí),要判斷插入是否重復(fù),然后再插入,那么如何提高效率?解決的辦法有很多種,不同的場(chǎng)景解決方案也不一樣,數(shù)據(jù)量很小的情況下,怎么搞都行,但是數(shù)據(jù)量很大的時(shí)候,這就不是一個(gè)簡(jiǎn)單的問題了。

一、insert ignore into

會(huì)忽略數(shù)據(jù)庫(kù)中已經(jīng)存在 的數(shù)據(jù),如果數(shù)據(jù)庫(kù)沒有數(shù)據(jù),就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過當(dāng)前插入的這條數(shù)據(jù)。這樣就可以保留數(shù)據(jù)庫(kù)中已經(jīng)存在數(shù)據(jù),達(dá)到在間隙中插入數(shù)據(jù)的目的。

控制器方法:

/**
 * 插入員工數(shù)據(jù)
 */
@PostMapping("save")
@ResponseBody
public CommonResult<Employee> save(@RequestBody Employee employee){
    return employeeService.saveEmp(employee);
}
INSERT INTO 插入數(shù)據(jù)
<!--插入員工數(shù)據(jù)-->
<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    INSERT INTO t_employee(id, name, age, salary, department_id)
    VALUES (#{id},#{name},#{age},#{salary},#{departmentId})
</insert>

在這里插入圖片描述

我們新增一條主鍵ID為1的員工記錄。

當(dāng)我再發(fā)送一次請(qǐng)求的時(shí)候,會(huì)報(bào)SQL語句執(zhí)行錯(cuò)誤,因?yàn)橹麈I唯一,并且ID=1的記錄已經(jīng)存在了。

在這里插入圖片描述

加上ignore,再次添加一條ID=1的員工記錄

INSERT IGNORE INTO

在這里插入圖片描述

并沒有報(bào)錯(cuò),但是也沒有添加成功,忽略了重復(fù)數(shù)據(jù)的添加。

二、on duplicate key update

當(dāng)主鍵或者唯一鍵重復(fù)時(shí),則執(zhí)行update語句。

 ON DUPLICATE KEY UPDATE id = id

我們?nèi)稳徊迦隝D=1的員工記錄,并且修改一下其他字段(age=25):

在這里插入圖片描述

查看數(shù)據(jù)庫(kù)記錄:

在這里插入圖片描述

可以看到并沒有改變,數(shù)據(jù)也只有一條,并且返回了成功的提示。

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

擴(kuò)展:這種方式還有其他業(yè)務(wù)場(chǎng)景的需求->>>定時(shí)更新其他字段。

我們?cè)趩T工表中,再加入一個(gè)時(shí)間字段:

private Date updateTime;

在這里插入圖片描述

然后我們根據(jù)updateTime字段來插入數(shù)據(jù):

<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    INSERT INTO t_employee(id, name, age, salary, department_id,update_time)
    VALUES (#{id},#{name},#{age},#{salary},#{departmentId},now())
    ON DUPLICATE KEY UPDATE update_time = now()
</insert>

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

如果插入的時(shí)候需要更新其他字段(比如age),該怎么做呢?

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

三、replace into

如果存在primary or unique相同的記錄,則先刪除掉。再插入新記錄。

REPLACE INTO
 <!--插入員工數(shù)據(jù)-->
<insert id="saveEmp" parameterType="com.dt.springbootdemo.entity.Employee">
    REPLACE INTO t_employee(id, name, age, salary, department_id,update_time)
    VALUES (#{id},#{name},#{age},#{salary},#{departmentId},now())
</insert>

在這里插入圖片描述

在這里插入圖片描述

總結(jié):實(shí)際開發(fā)中,用得最多的就是第二種方式,進(jìn)行的批量加。

<!--插入員工數(shù)據(jù)-->
<insert id="saveEmp" parameterType="java.util.List">
    INSERT INTO t_employee(id, name, age, salary, department_id,update_time)
    VALUES
    <foreach collection="list" item="item" index="index" separator=",">
        (#{item.id},#{item.name},#{item.age},#{item.salary},#{item.departmentId},now())
    </foreach>
    ON DUPLICATE KEY UPDATE id = id
</insert>

控制器:

@PostMapping("save")
@ResponseBody
public CommonResult<Employee> save(@RequestBody List<Employee> employeeList){
    return employeeService.saveEmp(employeeList);
}

在這里插入圖片描述

如果存在相同的ID,則不會(huì)重復(fù)添加。

總結(jié)

實(shí)際工作中,使用最多的是方法二,根據(jù)不同的場(chǎng)景選擇不同的方式使用。

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

相關(guān)文章

  • MySql 修改密碼后的錯(cuò)誤快速解決方法

    MySql 修改密碼后的錯(cuò)誤快速解決方法

    今天在MySql5.6操作時(shí)報(bào)錯(cuò):You must SET PASSWORD before executing this statement解決方法,需要的朋友可以參考下
    2016-11-11
  • MySQL表的重命名字段添加及字段屬性修改操作語法

    MySQL表的重命名字段添加及字段屬性修改操作語法

    這篇文章主要為大家介紹了MySQL表的重命名字段添加及字段屬性修改語法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • MySQL之表碎片化的問題解決

    MySQL之表碎片化的問題解決

    MySQL數(shù)據(jù)庫(kù)的碎片是由于頻繁的增刪改查操作導(dǎo)致的數(shù)據(jù)塊不連續(xù)或不規(guī)則分布,本文主要介紹了MySQL之表碎片化的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • MySQL中存儲(chǔ)過程的詳細(xì)詳解

    MySQL中存儲(chǔ)過程的詳細(xì)詳解

    存儲(chǔ)過程就是一條或者多條SQL語句的集合,可以視為批文件,它可以定義批量插入的語句,也可以定義一個(gè)接收不同條件的SQL,下面這篇文章主要給大家介紹了關(guān)于MySQL中存儲(chǔ)過程的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • mysql分區(qū)表的增刪改查的實(shí)現(xiàn)示例

    mysql分區(qū)表的增刪改查的實(shí)現(xiàn)示例

    增刪查改在數(shù)據(jù)庫(kù)中是很常見的操作,本文主要介紹了mysql分區(qū)表的增刪改查的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 你的like語句為什么沒索引詳解

    你的like語句為什么沒索引詳解

    這篇文章主要給大家介紹了關(guān)于你的like語句為什么沒索引的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • 利用ssh tunnel鏈接mysql服務(wù)器的方法

    利用ssh tunnel鏈接mysql服務(wù)器的方法

    這篇文章主要給大家介紹了利用ssh tunnel鏈接mysql服務(wù)器的方法,文中介紹的很詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • MySQL字符編碼設(shè)置方法

    MySQL字符編碼設(shè)置方法

    這篇文章主要介紹了MySQL字符編碼設(shè)置方法的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • MySQL中隱式轉(zhuǎn)換的踩坑記錄以及解決方法分享

    MySQL中隱式轉(zhuǎn)換的踩坑記錄以及解決方法分享

    這篇文章主要和大家分享一個(gè)MySQL隱式轉(zhuǎn)換時(shí)踩過的坑,差點(diǎn)把服務(wù)器整崩潰了,以及最后的解決辦法。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-11-11
  • mysql中g(shù)roup by與having合用注意事項(xiàng)分享

    mysql中g(shù)roup by與having合用注意事項(xiàng)分享

    在mysql中g(shù)roup by分組查詢我們經(jīng)常會(huì)用到,并且還同時(shí)會(huì)與having合用,下面我介紹group by用法與having合用注意事項(xiàng),希望此教程對(duì)各位朋友有所幫助
    2013-10-10

最新評(píng)論