五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

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

發(fā)布日期:2022-02-10 14:49 | 文章來源:CSDN

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

一、insert ignore into

會忽略數(shù)據(jù)庫中已經(jīng)存在 的數(shù)據(jù),如果數(shù)據(jù)庫沒有數(shù)據(jù),就插入新的數(shù)據(jù),如果有數(shù)據(jù)的話就跳過當前插入的這條數(shù)據(jù)。這樣就可以保留數(shù)據(jù)庫中已經(jīng)存在數(shù)據(jù),達到在間隙中插入數(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的員工記錄。

當我再發(fā)送一次請求的時候,會報SQL語句執(zhí)行錯誤,因為主鍵唯一,并且ID=1的記錄已經(jīng)存在了。

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

INSERT IGNORE INTO


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

二、on duplicate key update

當主鍵或者唯一鍵重復時,則執(zhí)行update語句。

 ON DUPLICATE KEY UPDATE id = id

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


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

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

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

擴展:這種方式還有其他業(yè)務場景的需求->>>定時更新其他字段。

我們在員工表中,再加入一個時間字段:

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>




如果插入的時候需要更新其他字段(比如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>



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

<!--插入員工數(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,則不會重復添加。

總結

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

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

國外服務器租用

版權聲明:本站文章來源標注為YINGSOO的內(nèi)容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部