📅  最后修改于: 2020-11-17 02:29:32             🧑  作者: Mango
MySQL中的REPLACE语句是SQL标准的扩展。该语句与INSERT语句的工作原理相同,不同之处在于,如果旧行与表中的PRIMARY KEY或UNIQUE索引的新记录匹配,则此命令在添加新行之前删除了旧行。
当我们想要将现有记录更新到表中以使其保持更新时,此语句是必需的。如果为此目的使用标准插入查询,它将为PRIMARY KEY或UNIQUE key错误提供重复条目。在这种情况下,我们将使用REPLACE语句执行我们的任务。 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语句的工作方式如下:
我们可以使用以下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语句将使用该列的默认值。
我们可以使用以下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;
验证表格后,我们将获得以下输出。在此输出中,我们可以看到成功添加了同一表中一行的副本。