mysql中实现多条数据同时更新
有时间我们需要对⼀张表进⾏批量数据的更新。⾸先我们想的是update 语句。
⽐如对⼀张订单表order_info 多条数据更新,
update order_inifo
set order_code =case order_id
when 1 then 'abc'
when 2 then 'bcd'
when 3 then 'cde'
........
end,
order_title=case order_id
批量更新sql语句when 1 then '标题1'
when 2 then '标题2'
when 3 then '标题3'
..........
end
when id in(1,2,3,..)
这样实现多条数据多个字段的更新,这样更新⽅式的条件是:
根据表中的字段id在等于不同值时,更新字段 order_code,order_title.
更新成相应的数据,这些数据都是可以明确的。但有时间这些数据是存放在⼀个集合⾥⾯,‘abc’,'bcd','cde','标题1','标题2','标题3',就没法写在上⾯了。这需要
遍历集合拿到相应的值,才能赋予对应的字段。由于需要更新的字段内容和id储藏在集合中,就没办法使⽤这样的sql语句了。有没有别的办法呢?
我们可以使⽤replace into⽅法来实现更新,replace into类似于insert,insert是⽐较熟悉的,经常使⽤,就是向数据库中插⼊数据。replace into 也是向数据库中
插⼊数据,不同的时,在插⼊数据时,数据库会根据主键或者唯⼀建(必须保证操作表中含有主键或者唯⼀建)判断表中是否已经含有对应的数据,如果没有直接插⼊,等同于insert,如有表中已经有对应的数据,那replace into就会根据主键或唯⼀建将该条数据delete掉,再做insert处理。
这样的话,我们完全可以使⽤replace into批量更新表中的数据。
<update id="upDateOrderInfo" parameterType="String" >
REPLACE INTO order_info (
order_code,
order_company,
order_statu,
order_id,
order_title
)
SELECT
FROM
(
<foreach collection="datas" item="data" separator="union">
SELECT
2 order_statu,
'${der_id}' order_id,
'${der_code}' order_log,
'${der_company}' order_company
</foreach>
) a,
order_info b
der_id = b.order_id
</update>
主键order_id和需要更新的字段order_code,order_company。都在集合中。通过replace into可以实现
表的批量更新。值得注意的是:replace into在做update操作时,将原来的数据delete掉了,所有除了更新的字段,其他字段(order_title)需要从原表中查询出来,⼀块更新。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论