MySQL REPLACE

17 Mar 2025 | 4 分钟阅读

MySQL 中的 REPLACE 语句是 SQL 标准的扩展。此语句的工作方式与 INSERT 语句相同,不同之处在于,如果表中的旧行与新记录的主键(PRIMARY KEY)或唯一索引(UNIQUE index)匹配,则该命令会在添加新行之前删除旧行。

当我们希望更新表中的现有记录以使其保持最新时,需要此语句。如果我们为此目的使用标准的插入查询,它将给出“PRIMARY KEY 或 UNIQUE key 重复条目”错误。在这种情况下,我们将使用 REPLACE 语句来执行我们的任务。REPLACE 命令需要以下两种可能的操作之一

  • 如果找不到与现有数据行匹配的值,则执行标准的 INSERT 语句。
  • 如果找到重复记录,则 replace 命令将删除现有行,然后将新记录添加到表中。

在 REPLACE 语句中,更新分两步完成。首先,它会删除现有记录,然后添加新更新的记录,这与标准 INSERT 命令类似。因此,我们可以说 REPLACE 语句执行两个标准函数:DELETEINSERT

语法

以下是 MySQLREPLACE 语句的语法

MySQL REPLACE 示例

让我们通过一个例子来理解 MySQL 中 REPLACE 语句的工作原理。首先,我们将使用以下语句创建一个名为 "Person" 的表

接下来,我们需要使用下面的 INSERT 语句将记录填入表中

执行 SELECT 语句以验证可以在以下输出中显示的记录

MySQL REPLACE

验证表中的数据后,我们可以使用 REPLACE 语句用新行替换任何旧行。执行以下语句,该语句将更新ID 为 4 的人的 city

成功执行上述语句后,需要再次查询 Person 表的数据以验证替换。

MySQL REPLACE

nameemail 列中的值现在是 NULL。这是因为 REPLACE 语句的工作方式如下

  • 该语句首先尝试将新行插入 Person 表。但是,由于 id = 4 已经存在于表中,因此插入新行失败。
  • 所以这个语句首先删除 id = 4 的行,然后插入具有相同 id 和 city 为 Amsterdam 的新行。由于我们没有为 name 和 email 列指定值,因此它们被设置为 NULL。

MySQL REPLACE 语句用于更新行

我们可以使用以下 REPLACE 语句来更新表中的行数据

上述语法与 UPDATE 语句相似,只是关键字是 REPLACE。需要注意的是,我们不能在此语句中使用 WHERE 子句

执行以下示例,该示例使用 REPLACE 语句将名为 Mike 的人的 city 从 California 更新为 Birmingham

验证表后,我们可以看到以下输出

MySQL REPLACE

如果我们没有在 SET 子句中指定列的值,则此命令的功能类似于 UPDATE 语句,这意味着 REPLACE 语句将使用该列的默认值。

MySQL REPLACE 用于从 SELECT 语句插入数据。

我们可以使用以下 REPLACE INTO 语句,通过查询返回的数据将数据插入表中。

需要注意的是,上述 REPLACE 查询与 INSERT INTO SELECT 语句相似。执行以下示例,该示例使用 REPLACE INTO 语句在同一表中复制一行。

验证表后,我们将获得以下输出。在此输出中,我们可以看到成功地在同一表中添加了行的副本。

MySQL REPLACE