一、批量更新
一:语法
UPDATE mytable SET
myfield = CASE id
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)
二:mybatis的xml文件写法
<update id="updateBatchList" parameterType="java.util.List">
update com_list_all set eid = CASE ent_name
<foreach collection="list" item="com">
WHEN #{com.entName} THEN #{com.eid}
</foreach>
END,
ent_sname = CASE ent_name
<foreach collection="list" item="com">
WHEN #{com.entName} THEN #{com.entSname}
</foreach>
END,
firstpy = CASE ent_name
<foreach collection="list" item="com">
WHEN #{com.entName} THEN #{com.firstpy}
</foreach>
END
WHERE ent_name IN
<foreach collection="list" separator="," item="com" open="(" close=")">
#{com.entName}
</foreach>
</update>
二、分段更新(update语句需排序才能加limit)
UPDATE ${tbname} SET crtime=now() ORDER BY crtime DESC LIMIT 100000
三、有则更新无则插入
1. REPLACE INTO + 唯一索引
REPLACE INTO `table` (`unique_column`,`num`) VALUES ($unique_value,$num);
注意:
当记录存在时(唯一索引冲突),会将命中记录删除,然后重新插入一条记录。所以 受影响的行: 2条
不可以使用自增主键
2. ON DUPLICATE
INSERT INTO `table` (`unique_column`,`num`) VALUES($unique_value,$num) ON DUPLICATE UPDATE num=$num;
注意:
当记录存在时(id或唯一索引冲突),会更新记录
网友评论