MySQL REPLACE
简介:在本教程中,您将学习如何使用 MySQL REPLACE 语句插入或更新数据库表中的数据。
MySQL REPLACE语句简介
MySQLREPLACE
语句是标准SQL的MySQL扩展。MySQL REPLACE
语句的工作原理如下:
要确定表中是否已存在新行,MySQL使用PRIMARY KEY或UNIQUE KEY
索引。如果表没有这些索引之一,则REPLACE
语句等同于INSERT语句。
使用MySQL REPLACE
的语句,你需要有至少两个INSERT
和DELETE
权限。
注意:有一个 REPLACE 字符串函数 ,它不是REPLACE
本教程中介绍的语句。
MySQL REPLACE语句示例
让我们看一下使用REPLACE
语句更好地理解其工作原理的示例 。
首先,创建一个的新表名为cities
如下:
CREATE TABLE cities ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), population INT NOT NULL );接下来,在表
cities
中插入一些行:
INSERT INTO cities(name,population) VALUES('New York',8008278), ('Los Angeles',3694825), ('San Diego',1223405);我们 从
cities
表中查询数据以验证插入操作。
SELECT * FROM cities;运行结果:
+----+-------------+------------+ | id | name | population | +----+-------------+------------+ | 1 | New York | 8008278 | | 2 | Los Angeles | 3694825 | | 3 | San Diego | 1223405 | +----+-------------+------------+ 3 rows in set (0.00 sec)我们在
cities
表中有三个城市。
然后,假设我们想要将纽约市的人口更新为1008256.我们可以使用UPDATE语句,如下所示:
UPDATE cities SET population = 1008256 WHERE id = 1;我们再次查询
cities
表中的数据以验证更新。
SELECT * FROM cities;
UPDATE
按预期更新了数据。
+----+-------------+------------+ | id | name | population | +----+-------------+------------+ | 1 | New York | 1008256 | | 2 | Los Angeles | 3694825 | | 3 | San Diego | 1223405 | +----+-------------+------------+ 3 rows in set (0.00 sec)然后,使用
REPLACE
语句更新洛杉矶城市的人口3696820
。
REPLACE INTO cities(id,population) VALUES(2,3696820);最后,
cities
再次查询表的数据以验证替换。
SELECT * FROM cities;运行结果:
+----+-----------+------------+ | id | name | population | +----+-----------+------------+ | 1 | New York | 1008256 | | 2 | NULL | 3696820 | | 3 | San Diego | 1223405 | +----+-----------+------------+ 3 rows in set (0.00 sec)您可能希望name列的值保持不变,但是名称列现在是
NULL
。REPLACE
执行不是这样的。在这种情况下,REPLACE
工作原理如下:
REPLACE
语句首先使用列列表提供的信息将新行插入cities
表中。插入失败,因为cities
表中已存在id为2的行,因此,MySQL会引发重复键错误。- 然后
REPLACE
语句将更新具有id
列值中指定的键的行。在正常过程中,它将首先删除具有冲突ID的旧行,然后插入新行。
REPLACE
语句没有删除旧行并插入新行,因为id列的值是2而不是4。
MySQL REPLACE和INSERT
REPLACE
语句的第一种形式类似于INSERT
语句,除了关键字INSERT
被关键字替换REPLACE
如下:
REPLACE INTO table_name(column_list) VALUES(value_list);
例如,如果要在
cities
表中插入新行,请使用以下查询:REPLACE INTO cities(name,population) VALUES('Phoenix',1321523);
注意:未出现在
例如,在以下语句中,我们仅指定REPLACE
语句中的列的默认值将插入到相应的列中。如果列具有NOT NULL
属性且没有默认值,并且您未在REPLACE
语句中指定值,则MySQL将引发错误。这是REPLACE
和INSERT
语句之间的区别。
name
列的值,而不是population
列。MySQL引发错误消息。因为population
列不接受NULL
值,所以我们在定义cities
表时没有为它指定默认值。
REPLACE INTO cities(name) VALUES('Houston');这是MySQL发出的错误消息:
Error Code: 1364. Field 'population' doesn't have a default value
MySQL REPLACE和UPDATE
第二种形式的REPLACE
陈述类似于以下UPDATE
陈述:
REPLACE INTO table SET column1 = value1, column2 = value2;请注意,没有WHERE子句中的
REPLACE
语句。
例如,如果要更新Phoenix
城市的人口1768980
,请使用以下REPLACE
语句:
REPLACE INTO cities SET id = 4, name = 'Phoenix', population = 1768980;与
UPDATE
语句不同,如果未在SET
子句中指定列的值,则REPLACE
语句将使用列的默认值。
SELECT * FROM cities;运行结果:
+----+-----------+------------+ | id | name | population | +----+-----------+------------+ | 1 | New York | 1008256 | | 2 | NULL | 3696820 | | 3 | San Diego | 1223405 | | 4 | Phoenix | 1768980 | +----+-----------+------------+ 4 rows in set (0.00 sec)
MySQL REPLACE INTO和SELECT
第三种形式的REPLACE
语句类似于INSERT INTO SELECT语句:
REPLACE INTO table_1(column_list) SELECT column_list FROM table_2 WHERE where_condition;假设您要复制id值为1的城市,请将
REPLACE INTO SELECT
语句用作以下查询:
REPLACE INTO cities(name,population) SELECT name,population FROM cities WHERE id = 1;
MySQL REPLACE语句用法
使用REPLACE
语句时需要了解几个要点:
- 如果您开发的应用程序不仅支持MySQL数据库,还支持其他关系数据库管理系统(RDBMS),则应避免使用
REPLACE
语句,因为其他RDBMS可能不支持它。相反,您可以在事务中使用DELETE 和 INSERT语句的组合 。 - 如果您使用的是
REPLACE
在具有TABLE语句触发器和重复键错误发生的删除,触发器将按照以下顺序被解雇:BEFORE INSERT
BEFORE DELETE
,AFTER DELETE
,AFTER INSERT
万一REPLACE
语句删除当前行并插入新行。如果REPLACE
语句更新当前行,则会触发BEFORE UPDATE
和AFTER UPDATE
触发器。
REPLACE
语句来插入或更新表中的数据。