MySQL REPLACE

摘要在本教程中,您将学习如何使用 MySQL REPLACE语句在数据库表中插入或更新数据。

MySQL REPLACE语句简介

MySQL REPLACE语句是SQL标准的扩展。 MySQL REPLACE语句的工作原理如下:

步骤1.如果出现重复键错误,则在表中插入新行

步骤2.如果由于出现重复键错误导致插入失败:

  • 从表中删除导致重复键错误的冲突行。
  • 再次将新行插入表中。

为了确定新行是否已存在于表中,MySQL 使用PRIMARY KEYUNIQUE KEY索引。如果表没有这些索引之一,则REPLACE工作方式类似于INSERT语句。

要使用REPLACE语句,您至少需要拥有表的INSERTDELETE权限。

请注意,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)
MySQL REPLACE - 示例表

之后,使用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)
MySQL 替换示例

name列中的值现在为NULLREPLACE语句的工作原理如下:

  1. 首先, REPLACE语句尝试将新行插入cities表中。插入失败,因为 id 2 已存在于cities表中。
  2. 然后, 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 REPLACESELECT语句插入数据

下面说明了使用来自查询的数据将数据插入到表中的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语句。

本教程有帮助吗?