replace into examination_info
values(null,9003,'SQL','hard',90,'2021-01-01 00:00:00');

关键区别于INSERT INTO

假设examination_info表的主键/唯一索引是exam_id

  1. 无冲突场景:表中无exam_id=9003的记录 → 直接插入这条新记录,自增主键id自动生成(比如1、2、3...)。
  2. 有冲突场景:表中已有exam_id=9003的记录 → 先删除原有记录,再插入新记录(原有数据被覆盖)。

慎用:会删除原有数据,易造成数据丢失

如果表中有exam_id=9003的记录,执行这条语句会直接删除原有记录,再插入新记录——数仓中(比如MaxCompute/Hive)无REPLACE INTO语法,且数仓强调数据可追溯,通常用INSERT OVERWRITE(覆盖分区)INSERT INTO(追加),而非这种“删除+插入”的方式。

数仓开发中你会用到Oracle/MaxCompute,这两个引擎无REPLACE INTO语法

总结

  1. REPLACE INTO是MySQL专属语法,核心逻辑是“有主键/唯一索引冲突则删旧插新,无冲突则插入”;
  2. 数仓开发中(Oracle/MaxCompute)慎用REPLACE INTO,优先用MERGE INTO(Oracle)或INSERT OVERWRITE/INSERT INTO(MaxCompute);