📜  MySQL替换

📅  最后修改于: 2020-11-17 02:29:32             🧑  作者: Mango

MySQL替换

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

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

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

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

句法

以下是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的数据以验证替换。

名称和电子邮件列中的值现在为NULL。这是因为REPLACE语句的工作方式如下:

  • 该语句首先尝试在Person表中插入新行。但是插入新行失败,因为表中已经存在id = 4。
  • 因此,该语句首先删除id = 4的行,然后插入与id和阿姆斯特丹相同的id和城市的新行。由于我们尚未为name和email列指定值,因此将其设置为NULL。

MySQL REPLACE语句更新一行

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

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

除了REPLACE关键字外,以上语法与UPDATE语句相似。注意,我们不能在此语句中使用WHERE子句。

执行以下示例,该示例使用REPLACE语句将名为Mike的人的城市从加利福尼亚更新为伯明翰。

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

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

如果未在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;

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