replace into examination_info values(null,9003,'SQL','hard',90,'2021-01-01 00:00:00');
关键区别于INSERT INTO
假设examination_info表的主键/唯一索引是exam_id:
- 无冲突场景:表中无
exam_id=9003的记录 → 直接插入这条新记录,自增主键id自动生成(比如1、2、3...)。 - 有冲突场景:表中已有
exam_id=9003的记录 → 先删除原有记录,再插入新记录(原有数据被覆盖)。
慎用:会删除原有数据,易造成数据丢失
如果表中有exam_id=9003的记录,执行这条语句会直接删除原有记录,再插入新记录——数仓中(比如MaxCompute/Hive)无REPLACE INTO语法,且数仓强调数据可追溯,通常用INSERT OVERWRITE(覆盖分区)或INSERT INTO(追加),而非这种“删除+插入”的方式。
数仓开发中你会用到Oracle/MaxCompute,这两个引擎无REPLACE INTO语法
总结
REPLACE INTO是MySQL专属语法,核心逻辑是“有主键/唯一索引冲突则删旧插新,无冲突则插入”;- 数仓开发中(Oracle/MaxCompute)慎用
REPLACE INTO,优先用MERGE INTO(Oracle)或INSERT OVERWRITE/INSERT INTO(MaxCompute);

京公网安备 11010502036488号