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

MySQL分批插入/更新數(shù)據(jù)方式

 更新時間:2025年02月07日 14:19:55   作者:天瑕  
文章介紹了如何使用MySQL分批插入/更新數(shù)據(jù),以避免大 SQL 語句導致的更新失敗或拋出異常,通過手寫分批代碼或使用 Guava 庫的 partition 方法,可以簡化批量操作,同時,文章還提到如何使用 partition 方法進行分組查詢

MySQL分批插入/更新數(shù)據(jù)

在我們的日常開發(fā)中,經(jīng)常會使用到批量insert/update的語句來實現(xiàn)相關的業(yè)務功能。而如果數(shù)據(jù)量比較大的話,會導致sql語句更新失敗、拋出異常的情況出現(xiàn)。

這個時候我們可以批量執(zhí)行sql語句,一批一批的執(zhí)行。

比如說現(xiàn)在有一個需要批量修改商品的方法

我們可以這么改造:

public void batchUpdateById(List<Product> productList) {
    if (CollectionUtils.isEmpty(productList)) {
        return;
    }

    if (productList.size() > CommonUtils.BATCH_NUMBER) {
        int sizeNum = productList.size();
        int startNum = 0;
        int endNum = CommonUtils.BATCH_NUMBER - 1;
        while (startNum < endNum) {
            productMapper.batchUpdateById(productList.subList(startNum, endNum));
            startNum += CommonUtils.BATCH_NUMBER - 1;
            endNum += CommonUtils.BATCH_NUMBER - 1;
            if (endNum > sizeNum - 1) {
                endNum = sizeNum;
            }
        }
    } else {
        productMapper.batchUpdateById(productList);
    }
}

上面BATCH_NUMBER的值是50,意味著當修改商品的數(shù)量大于50的時候,會以50個數(shù)據(jù)為一批,分批的執(zhí)行;而如果修改商品的數(shù)量不大于50的時候,就直接一次執(zhí)行就夠了。

上面是我們自己手寫的分批代碼,而如果每個方法都這么寫,也未免太過于繁瑣了。

這個時候我們就可以使用guava庫中關于集合的partition分組方法來進行簡化:

@Override
public void batchUpdateById(List<GoodsSkuBO> list) {
    if (CollectionUtils.isEmpty(list)) {
        return;
    }

    List<MerchantGoodsSkuDO> merchantGoodsSkuDOS = GoodsAnotherSkuConvertor.INSTANCE.goodsSkuBO2MerchantDOList(list);
    List<List<MerchantGoodsSkuDO>> groupMerchantGoodsSkuDOS = Lists.partition(merchantGoodsSkuDOS, CommonUtils.BATCH_NUMBER);
    groupMerchantGoodsSkuDOS.forEach(goodsSkuMasterMapper::batchUpdateById);
}

由上可以看到,代碼簡化了很多

(上面的goodsSkuBO2MerchantDOList方法只是將BO轉成DO,和分組邏輯沒有關系)。

而對于批量查詢的方法,我們也可以使用partition方法進行分組查詢,防止in條件拼接太多的數(shù)據(jù)導致sql報錯的情況出現(xiàn):

@Override
public List<GoodsSkuBO> listBySpuIdsSimple(List<Long> spuIds) {
    if (CollectionUtils.isEmpty(spuIds)) {
        return Collections.emptyList();
    }

    //去重
    spuIds = spuIds.stream().distinct().collect(Collectors.toList());
    List<List<Long>> groupSpuIds = Lists.partition(spuIds, CommonUtils.BATCH_NUMBER);
    List<MerchantGoodsSkuDO> spuIdList = groupSpuIds.stream().map(goodsSkuMasterMapper::listBySpuIds).flatMap(Collection::stream)
            .collect(Collectors.toList());
    return GoodsAnotherSkuConvertor.INSTANCE.merchantGoodsSkuDO2GoodsSkuBOList(spuIdList);
}

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • mysql update語句的用法詳解

    mysql update語句的用法詳解

    本文詳細介紹了,mysql中update語句的用法,系統(tǒng)全面的學習下update更新語句的用法,有需要的朋友可以參考下
    2014-08-08
  • 解讀數(shù)據(jù)庫的嵌套查詢的性能問題

    解讀數(shù)據(jù)庫的嵌套查詢的性能問題

    這篇文章主要介紹了解讀數(shù)據(jù)庫的嵌套查詢的性能問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Mysql存儲過程、觸發(fā)器、事件調度器使用入門指南

    Mysql存儲過程、觸發(fā)器、事件調度器使用入門指南

    存儲過程(Stored Procedure)是一種在數(shù)據(jù)庫中存儲復雜程序的數(shù)據(jù)庫對象。為了完成特定功能的SQL語句集,經(jīng)過編譯創(chuàng)建并保存在數(shù)據(jù)庫中,本文給大家介紹Mysql存儲過程、觸發(fā)器、事件調度器使用入門指南,感興趣的朋友一起看看吧
    2022-01-01
  • 解決MySQL 5.7.9版本sql_mode=only_full_group_by問題

    解決MySQL 5.7.9版本sql_mode=only_full_group_by問題

    這篇文章主要介紹了解決MySQL 5.7.9版本sql_mode=only_full_group_by問題,需要的朋友可以參考下
    2017-05-05
  • Mysql Binlog數(shù)據(jù)查看的方法詳解

    Mysql Binlog數(shù)據(jù)查看的方法詳解

    這篇文章主要介紹了Mysql Binlog數(shù)據(jù)查看的方法詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • Can''t connect to local MySQL through socket ''/tmp/mysql.sock''解決方法

    Can''t connect to local MySQL through socket ''/tmp/mysql.so

    今天小編就為大家分享一篇關于Can't connect to local MySQL through socket '/tmp/mysql.sock'解決方法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 一文分享10個常用的MySQL高級用法

    一文分享10個常用的MySQL高級用法

    MySQL?有很多高級但實用的功能,能讓你的查詢變得更簡潔、更高效,今天分享?10?個我在工作中經(jīng)常使用的?SQL?技巧,不用死記硬背,掌握了就能立刻提升你的數(shù)據(jù)庫操作水平
    2025-12-12
  • MySQL 用戶權限與安全管理最佳實踐

    MySQL 用戶權限與安全管理最佳實踐

    MySQL用戶權限與安全管理是保障數(shù)據(jù)庫系統(tǒng)穩(wěn)定與安全的重要環(huán)節(jié),通過合理設計權限模型、使用 GRANT/REVOKE命令管理權限、實施最小權限原則以及加強密碼,可以大幅降低數(shù)據(jù)庫被非法訪問和數(shù)據(jù)泄露的風險,這篇文章主要介紹了MySQL 用戶權限與安全管理,需要的朋友可以參考下
    2025-03-03
  • MySQL修改密碼的幾種方式

    MySQL修改密碼的幾種方式

    這篇文章主要介紹了MySQL修改密碼的幾種方式,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下
    2020-12-12
  • MySQL主從狀態(tài)檢查的實現(xiàn)

    MySQL主從狀態(tài)檢查的實現(xiàn)

    這篇文章主要介紹了MySQL主從狀態(tài)檢查的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02

最新評論

乌拉特后旗| 顺昌县| 连平县| 甘德县| 红桥区| 铜梁县| 滕州市| 左云县| 阜康市| 海宁市| 闽侯县| 皋兰县| 株洲市| 叙永县| 尚志市| 奉新县| 建水县| 庐江县| 通河县| 泰来县| 崇文区| 桑植县| 信阳市| 莆田市| 长治市| 赤水市| 比如县| 贺兰县| 察哈| 三河市| 阿荣旗| 霍林郭勒市| 朝阳县| 盐池县| 广丰县| 平谷区| 怀宁县| 蓝田县| 南漳县| 正镶白旗| 宜良县|