前言
在实际工作开发中,我并没有太注意过replace into
和insert...on duplicate key update
的区别。此前的我一直认为,这两者用哪个都是无所谓的,也就没太关注过两者之间的区别。但在开发中,偶然帮别人找bug,从逻辑到语法都没有发现任何问题,从数据库追溯也没找到任何相关信息,最终发现其实就是这两者混用了… …
首先来说结论
replace into
和insert...on duplicate key update
都是先尝试插入数据,若主键或者唯一索引重复,再去更新数据replace into
字面意思就是“替换数据”,其更新数据的方式为:若主键或者唯一索引已经存在了,则删除该行数据,然后再去执行插入,达到了更新数据的效果。insert...on duplicate key update
字面意思就是“插入…当键重复的时候更新…”,其更新数据的方式为:若主键或者唯一索引已经存在了,则去执行更新语句,直接更新指定的字段。
两个语句都是插入失败则更新,结果都是数据库内的数据是最新的,为什么还要区分呢?
实践操作
假设我们有一个用户表,表包含:用户id、姓名、性别、电话、家庭住址。一起来建立一下表结构:
CREATE TABLE &#