MySQL Replace记录

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

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

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

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

一、MySQL Replace语句的 语法

以下是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语句验证可以在以下输出中显示的记录:

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

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

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

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

  • 此语句首先尝试将新行插入到 Person 表中。但是插入新行失败,因为表中已经存在 id = 4。
  • 所以这个语句首先删除id=4的行,然后插入一个与阿姆斯特丹相同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';  

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

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

四、MySQL REPLACE INTO语句

我们可以使用以下 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;  

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

热门文章

优秀文章