java-replace into详解(SQL)
replace into详解
- 前言
- 一、replace into原理
- 二、replace into的应用注意事项
- 三、java-mapper批量操作
前言
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>