MySQL REPLACE语句

MySQL REPLACE语句

MySQL中的REPLACE语句是SQL标准的扩展。该语句的工作方式与INSERT语句相同,只是如果旧行与表中的新记录匹配,其删除旧行后再添加新行,用于主键或唯一索引。

当我们想要更新表中的现有记录以使其保持更新时,需要使用该语句。如果我们使用标准的插入查询来实现这个目的,会出现“主键重复”或“唯一键重复”的错误。在这种情况下,我们将使用REPLACE语句来执行我们的任务。REPLACE命令需要执行以下两种 可能 操作之一:

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

在REPLACE语句中,更新分为两个步骤。首先,它会删除现有记录,然后添加新记录,类似于标准的INSERT命令。因此,我们可以说REPLACE语句执行了两个标准功能, DELETEINSERT

语法

以下是 MySQL 中REPLACE语句的语法:

REPLACE [INTO] table_name(column_list)
VALUES(value_list);

MySQL REPLACE示例

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

CREATE TABLE Person (
  ID int AUTO_INCREMENT PRIMARY KEY,
  Name varchar(45) DEFAULT NULL,
  Email varchar(45) DEFAULT NULL UNIQUE,
  City varchar(25) DEFAULT NULL
);

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

INSERT INTO Person(ID, Name, Email, City) 
VALUES (1,'Mike', 'mike@javatpoint.com', 'California'), 
(2, 'Alexandar', 'alexandar@javatpoint.com', 'New York'), 
(3, 'Adam', 'adam@javatpoint.com', 'Los Angeles'),
(4, 'Peter', 'Peter@javatpoint.com', 'Alaska');

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

MySQL REPLACE语句

在将数据验证到表格中之后,我们可以使用REPLACE语句将任何旧的行替换为新的行。执行下面的语句来更新id为4的人的城市。

REPLACE INTO Person (id, city)
VALUES(4,'Amsterdam');

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

MySQL REPLACE语句

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

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

MySQL REPLACE语句用于更新行数据

我们可以使用以下REPLACE语句将行数据更新到表中:

REPLACE INTO table
SET column1 = value1, column2 = value2;

以上语法与UPDATE语句类似,不同之处在于REPLACE关键字。需要注意的是,我们不能在这个语句中使用WHERE子句。

执行下面的示例,使用REPLACE语句更新名为 Mike 的人的城市,从 California 变更为 Birmingham

REPLACE INTO Person
SET ID = 1,
    Name = 'Mike',
    City = 'Birmingham';

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

MySQL REPLACE语句

如果我们在 SET子句 中没有指定列的值,那么这个命令就像 UPDATE语句一样工作,这意味着REPLACE语句将使用该列的默认值。

MySQL REPLACE通过SELECT语句插入数据。

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

REPLACE INTO table1(column_list)
SELECT column_list
FROM table2
WHERE condition;

请注意,上面的REPLACE查询与 INSERT INTO SELECT 语句类似。执行下面的示例,使用REPLACE INTO语句在同一张表中复制一行。

REPLACE INTO Person(Name, City)
SELECT Name, City 
FROM Person WHERE id = 2;

验证表格后,我们将获得以下输出。在这个输出中,我们可以看到在同一张表中复制一行已成功添加。

MySQL REPLACE语句

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程