MySQL replace into 和 on duplicate key update 区别
1 replace into
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
replace into 会给未显式指定列的值覆盖为新的列默认值
-- 创建测试表 create table T20220429_ReplaceInto ( Id int primary key comment 'Id', Name varchar(20) comment '名字', Age int comment '年龄', Addr varchar(20) comment '地址', Msg varchar(20) DEFAULT '默认值' );
执行 replace into
2 on duplicate key update
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
-- 创建测试表 create table T20220429_OnDuplicateKeyUpdate ( Id int primary key comment 'Id', Name varchar(20) comment '名字', Age int comment '年龄', Addr varchar(20) comment '地址', Msg varchar(20) DEFAULT '默认值' ); insert into T20220429_OnDuplicateKeyUpdate(Id,Name,Age,Addr,Msg) values(1,'n1',10,'a1','Msg1');