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

在工做中總會遇到新增數據的時候,判斷相同的數據不導入的問題。傳統的解決方式是經過查詢數據庫的方式解決,可是十分的耗費性能,這裏咱們提供一種較爲簡便的方式,使用replace into方法:
對於存在的重複數據,會替換掉,不存在的新增
使用replace into 的前提是,數據庫的字段須要添加惟一聯合索引java

例如: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>

關於插入數據時候先判斷數據是否存在 幾種不一樣使用狀況 能夠參考spa

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

http://www.javashuo.com/article/p-gurbosxf-dz.htmlcode

相關文章
相關標籤/搜索