MySql使用聯合唯一索引和replace into方法進行重復數據update非重復數據insert


在工作中總會遇到新增數據的時候,判斷相同的數據不導入的問題。傳統的解決方式是通過查詢數據庫的方式解決,但是十分的耗費性能,這里我們提供一種較為簡便的方式,使用replace into方法:
對於存在的重復數據,會替換掉,不存在的新增
使用replace into 的前提是,數據庫的字段需要添加唯一聯合索引

例如:t_aa 表中有aa,bb兩個字段,如果不希望有2條一模一樣的記錄(即:aa字段的值可以重復; bb字段的值也可以重復,但是一條記錄(aa,bb)組合值不允許重復),需要給 t_aa 表添加多個字段的聯合唯一索引:

alter  table  t_car_oil_statistics add unique index save_unique_index(car_id,statistics_date);

然后使用replace into 語句解決,其中(car_id,statistics_date);是數據庫中不能重復的字段條件

 

<select id="batchSaveCarOilStatistics" parameterType="java.util.List">
        replace INTO t_car_oil_statistics
        (created,
        car_id,
        statistics_date,
        oil,
        cost,
        card_num,
        company_id,
        statistics_month
        )
        VALUES
        <foreach collection="list" index="index" item="item" separator=",">
            (#{item.created},
            #{item.carId},
            #{item.statisticsDate},
            #{item.oil},
            #{item.cost},
            #{item.cardNum},
            #{item.companyId},
            #{item.statisticsMonth})
        </foreach>
    </select>

關於插入數據時候先判斷數據是否存在 幾種不同使用情況 可以參考

https://blog.csdn.net/w309827333/article/details/79482407

https://blog.csdn.net/BuptZhengChaoJie/article/details/50992923


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM