replace into详解
前言
replace是insert的增强版
一、replace into原理
replace into 首先尝试插入数据到表中,
- 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据
二、replace into的应用注意事项
1)插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
2)如果数据库里边有这条记录,则直接修改这条记录;如果没有则,则直接插入,在有外键的情况下,对主表进行这样操作时,因为如果主表存在一条记录,被从表所用时,直接使用replace into是会报错的,这和replace into的内部原理是相关(先删除然后再插入)。
3)频繁的REPLACE INTO 会造成新纪录的主键的值迅速增大。总有一天。达到最大值后就会因为数据太大溢出了。就没法再插入新纪录了。数据表满了,不是因为空间不够了,而是因为主键的值没法再增加了。
三、java-mapper批量操作
<sql id="Base_Column_List">
plate_no
</sql>
<insert id="replaceWhiteList" parameterType="java.util.List">
replace into white_list
(<include refid="Base_Column_List"/>)
VALUES
<foreach collection="list" item="item" separator=",">
( #{item.plateNo} )
</foreach>
</insert>
replaceinto是MySQL中的一种数据插入方法,它在遇到重复键时会先删除原有数据再插入新数据。此操作需要表有主键或唯一索引,否则可能造成数据重复。在Java-Mapper中可以用于批量操作,但频繁使用可能导致主键值过大。在有外键约束的情况下,需谨慎使用,以避免错误。
334

被折叠的 条评论
为什么被折叠?



