您可以使用REPLACE语法往表中插入行或替换表中的行。
语法
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] [schema_name.]tbl_name
[(col_name [, col_name] ...)]
{VALUES | VALUE} (value_list) [, (value_list)]
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] [schema_name.]tbl_name
SET assignment_list
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] [schema_name.]tbl_name
[(col_name [, col_name] ...)]
SELECT ...
value_list:
value [, value] ...
value:
{expr | DEFAULT}
assignment_list:
assignment [, assignment] ...
assignment:
col_name = value 语法限制
不支持使用以下语法。
- PARTITION语法,例如:
REPLACE INTO tb PARTITION (p0) (id) VALUES(7); - 嵌套NEXTVAL的语法,例如:
REPLACE INTO tb(id) VALUES(SEQ1.NEXTVAL + 1); - 包含列名的语法,例如:
REPLACE INTO tb(id1, id2) VALUES(1, id1 + 1);
分布式事务限制
说明
如果您的表是分表,但是事务执行过程中没有跨库(如INSERT或UPDATE带拆分键),则仍视为单库事务。关于分布式事务的更多说明,请参见分布式事务。
开启分布式事务时,不支持如下REPLACE命令:
- 表没有定义主键,例如:
CREATE TABLE tb(id INT, name VARCHAR(10)); REPLACE INTO tb VALUES(1, 'a'); - 表没有拆分,主键自增但没有使用Sequence。例如:
CREATE TABLE tb(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(10)); REPLACE INTO tb(name) VALUES('a');您可以指定该主键使用Sequence,避免这条限制,例如:
CREATE TABLE tb(id INT PRIMARY KEY AUTO_INCREMENT BY GROUP, name VARCHAR(10)); REPLACE INTO tb(name) VALUES('a');
相关文献
MySQL REPLACE语法。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




