摘要:在本教程中,您将学习如何使用 MySQL REPLACE
语句在数据库表中插入或更新数据。
MySQL REPLACE
语句简介
MySQL REPLACE
语句是SQL标准的扩展。 MySQL REPLACE
语句的工作原理如下:
步骤1.如果出现重复键错误,则在表中插入新行。
步骤2.如果由于出现重复键错误导致插入失败:
- 从表中删除导致重复键错误的冲突行。
- 再次将新行插入表中。
为了确定新行是否已存在于表中,MySQL 使用PRIMARY KEY
或UNIQUE KEY
索引。如果表没有这些索引之一,则REPLACE
工作方式类似于INSERT
语句。
要使用REPLACE
语句,您至少需要拥有表的INSERT
和DELETE
权限。
请注意,MySQL 有REPLACE
字符串函数,这不是本教程中介绍的REPLACE
语句。
使用 MySQL REPLACE
插入新行
下面说明了REPLACE
语句的语法:
REPLACE [INTO] table_name(column_list)
VALUES(value_list);
Code language: SQL (Structured Query Language) (sql)
REPLACE
之外,它与INSERT
语句类似。让我们看一下下面使用REPLACE
语句的示例,看看它是如何工作的。
首先,创建一个名为cities
的新表,如下所示:
CREATE TABLE cities (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
population INT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
接下来,将一些行插入cities
表中:
INSERT INTO cities(name,population)
VALUES('New York',8008278),
('Los Angeles',3694825),
('San Diego',1223405);
Code language: SQL (Structured Query Language) (sql)
然后,从cities
表中查询数据来验证插入操作。
SELECT * FROM cities;
Code language: SQL (Structured Query Language) (sql)

之后,使用REPLACE
语句将Los Angeles
市的人口更新为3696820
。
REPLACE INTO cities(id,population)
VALUES(2,3696820);
Code language: SQL (Structured Query Language) (sql)
最后再次查询cities
表的数据来验证替换情况。
SELECT * FROM cities;
Code language: SQL (Structured Query Language) (sql)

name
列中的值现在为NULL
。 REPLACE
语句的工作原理如下:
- 首先,
REPLACE
语句尝试将新行插入cities
表中。插入失败,因为 id 2 已存在于cities
表中。 - 然后,
REPLACE
语句删除了 id 2 的行,并插入了具有相同 id 2 和人口3696820
的新行。由于没有为 name 列指定值,因此它被设置为NULL
。
使用 MySQL REPLACE
语句更新行
下面说明如何使用REPLACE
语句更新数据:
REPLACE INTO table
SET column1 = value1,
column2 = value2;
Code language: SQL (Structured Query Language) (sql)
除了REPLACE
关键字之外,此语句与UPDATE
语句类似。此外,它没有WHERE
子句。
此示例使用REPLACE
语句将Phoenix
城的人口更新为1768980
:
REPLACE INTO cities
SET id = 4,
name = 'Phoenix',
population = 1768980;
Code language: SQL (Structured Query Language) (sql)
与UPDATE
语句不同,如果您没有在SET
子句中指定列的值, REPLACE
语句将使用该列的默认值。
SELECT * FROM cities;
Code language: SQL (Structured Query Language) (sql)
使用 MySQL REPLACE
从SELECT
语句插入数据
下面说明了使用来自查询的数据将数据插入到表中的REPLACE
语句。
REPLACE INTO table_1(column_list)
SELECT column_list
FROM table_2
WHERE where_condition;
Code language: SQL (Structured Query Language) (sql)
请注意,这种形式的REPLACE
语句类似于INSERT INTO SELECT
语句。
以下语句使用REPLACE INTO
语句复制同一表中的行:
REPLACE INTO
cities(name,population)
SELECT
name,
population
FROM
cities
WHERE id = 1;
Code language: SQL (Structured Query Language) (sql)
在本教程中,您学习了用于在表中插入或更新数据的不同形式的 MySQL REPLACE
语句。