MySQL REPLACE语句
MySQL中的REPLACE语句是SQL标准的扩展。该语句的工作方式与INSERT语句相同,只是如果旧行与表中的新记录匹配,其删除旧行后再添加新行,用于主键或唯一索引。
当我们想要更新表中的现有记录以使其保持更新时,需要使用该语句。如果我们使用标准的插入查询来实现这个目的,会出现“主键重复”或“唯一键重复”的错误。在这种情况下,我们将使用REPLACE语句来执行我们的任务。REPLACE命令需要执行以下两种 可能 操作之一:
- 如果不存在与现有数据行匹配的值,则执行标准的INSERT语句。
- 如果找到重复记录,则替换命令将删除现有行,然后将新记录添加到表中。
在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表的数据以验证替换。
在 name 和 email 列中的值现在为 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';
在验证表格后,我们可以看到以下输出:
如果我们在 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;
验证表格后,我们将获得以下输出。在这个输出中,我们可以看到在同一张表中复制一行已成功添加。