REPLACE 是 MySQL 中一个非常实用的命令,可以看作是 INSERT 的增强版。它的主要功能是:如果表中已存在相同的主键或唯一索引记录,则先删除旧记录,再插入新记录;如果不存在,则直接插入新记录

REPLACE 的基本用法

REPLACE 的语法几乎与 INSERT 相同,唯一的区别是:插入的字段中必须包含主键或唯一索引字段

示例 1:插入单条数据

1
2
REPLACE INTO tabname(id, name, createtime) 
VALUES (1, 'name', '2020-08-18');

示例 2:将查询结果作为值插入

1
2
3
4
5
REPLACE INTO tabname(id, name, createtime)
SELECT
(SELECT id FROM tabname WHERE createdate = '2022-02-01') AS id,
'test' AS name,
'2022-08-18' AS createtime;

REPLACE 的工作原理

  1. 检查冲突:REPLACE 会根据主键或唯一索引检查表中是否已存在相同记录。
  2. 删除旧记录:如果存在冲突,则先删除旧记录。
  3. 插入新记录:插入新记录。

注意事项

  • 性能影响:由于 REPLACE 可能会先删除再插入,因此在数据量较大时,可能会影响性能。
  • 字段完整性:如果表中定义了自增主键,使用 REPLACE 会导致自增值增加。
  • 触发器:REPLACE 会触发 DELETE 和 INSERT 触发器。