MySQL的Replace into 与Insert into ..... on duplicate

(1),没有key的时候,replace与insert .. on deplicate udpate相同。
(2),有key的时候,都保留主键值,而且auto_increment自动+1
不一样之处:有key的时候,replace是delete老记录,而录入新的记录,因此原有的全部记录会被清除,这个时候,若是replace语句的字段不全的话,有些原有的好比例子中c字段的值会被自动填充为默认值。
     而insert .. deplicate update则只执行update标记以后的sql,从表象上来看至关于一个简单的update语句。
     可是实际上,根据我推测,若是是简单的update语句,auto_increment不会+1,应该也是先delete,再insert的操做,只是在insert的过程当中保留除update后面字段之外的全部字段的值。
 
因此二者的区别只有一个,insert .. on deplicate udpate保留了全部字段的旧值,再覆盖而后一块儿insert进去,而replace没有保留旧值,直接删除再insert新值。
从底层执行效率上来说,replace要比insert .. on deplicate update效率要高,可是在写replace的时候,字段要写全,防止老的字段数据被删除。sql

相关文章
相关标签/搜索