使用场景
给mysql中一个表增加数据(原来存在就覆盖,不存在就插入),两者都可以完成这种功能。
前提
表中至少存在一个primary key或unique key
区别
replace
replace工作分两步:1.验证插入数据是否在表中存在相同的key;2若有则将其删除,若无则插入;
当有更新操作时,将会影响两行;
因为删除重建的关系,同时索引也需要重建,但数据量较大时会比较费时
eg:replace into table_name (columns…) values ()
on duplicate key update
其同样分两步:1.验证插入数据是否在表中存在相同的key;2若有则将不同的值替换掉,若无则插入;
当有更新操作仅影响一行;
eg: insert into table_name (columns…) values() on duplicate key update columns1 = xxx, columns2= xxx…