目录
replace into 与 insert into on duplicate key update有什么区别?使用需要注意什么?
相同点
当没有key(主键或唯一key)冲突时,replace into和insert into on duplicate key update一样的,相当于普通的insert
当有key冲突的时候,auto_increment都会自动+1
不同点
当与key冲突时,replace可以理解为删除重复key的记录,新插入一条记录,如果replace语句的字段不全的话,有些原有的未写入replace语句的字段的值会被自动填充为默认值,如果有自增id的话,自增id会变化为最新的值
当与key冲突时,insert into on duplicate key update只update相应字段值,其余字段的值不会受到影响
注意点
1.使用replace时,要考虑写全字段,否则可能导致其余字段的值被覆盖,其次如果是以自增id为业务标志的话可能导致记录丢失
2.使用replace本质为delete + insert,相对于insert on duplicate key update,会多一倍的写操作,当重复数据非常多时(比如超过50%),代价很高
3.使用insert on duplicate key update 触发更新也会auto_increment+1,可能导致自增id不连续,和数据库参数配置有关