irpas技术客

SQL语法——REPLACE语句_吴声子夜歌_replace sql

大大的周 2258

REPLACE

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

如果新行已不存在,则MySQL REPLACE 语句将插入新行。如果新行已存在,则 REPLACE 语句首先删除旧行,然后插入新行。在某些情况下,REPLACE语句仅更新现有行。

注意:要确定表中是否已存在新行,MySQL使用PRIMARY KEY或UNIQUE KEY 索引。如果表没有这些索引之一,则REPLACE语句等同于INSERT语句。

示例

CREATE TABLE cities ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), population INT NOT NULL ); INSERT INTO cities(name,population) VALUES('New York',8008278), ('Los Angeles',3694825), ('San Diego',1223405);

使用REPLACE语句更新洛杉矶城市的人口3696820

REPLACE INTO cities(id, population) VALUES(2,3696820);

REPLACE工作原理如下:

REPLACE语句首先使用列表提供的信息将新行插入cities表中。插入失败,因为cities表中已存在id为2的行,因此,MySQL会引发重复键错误。然后REPLACE语句将更新具有id列值中指定的键的行。在正常过程中,它将首先删除具有冲突ID的旧行,然后插入新行。

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语句之间的区别。

REPLACE INTO cities(name) VALUES('Houston');

MySQL REPLACE和UPDATE 第二种形式的 REPLACE 陈述类似于以下UPDATE陈述:

REPLACE INTO table SET column1 = value1, column2 = value2;

例如,如果要更新Phoenix城市的人口1768980,请使用以下REPLACE语句:

REPLACE INTO cities SET id = 4, name = 'Phoenix', population = 1768980;

注意:与UPDATE语句不同,如果未在SET子句中指定列的值,则REPLACE语句将使用列的默认值

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数据库,还支持其他关系数据库管理系统(RDBMS),则应避免使用REPLACE语句,因为其他RDBMS可能不支持它。相反,您可以在事务中使用DELETE 和 INSERT语句的组合 。如果使用的是REPLACE在具有TABLE语句触发器和重复键错误发生的删除,触发器将按照以下顺序被解雇:BEFORE INSERT BEFORE DELETE,AFTER DELETE,AFTER INSERT 万一REPLACE语句删除当前行并插入新行。如果REPLACE语句更新当前行,则会触发BEFORE UPDATE和AFTER UPDATE触发器。

sql


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #replace #SQL #REPLACEMySQL #MySQL