REPLACE
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);
拆分键不是自增键时,VALUES 从句中没有指定拆分键的值,或者指定的值为DEFAULT。例如:
CREATE TABLE tb(id INT, name VARCHAR(10)) TBPARTITION BY HASH(id);
REPLACE INTO tb(name) VALUES('a');
REPLACE INTO tb VALUES(DEFAULT, 'a');
嵌套 NEXTVAL 的表达式,例如:
REPLACE INTO tb(id) VALUES(SEQ1.NEXTVAL + 1);
包含列名的表达式,例如:
REPLACE INTO tb(id1, id2) VALUES(1, id1 + 1);
分布式事务限制
开启分布式事务时,以下功能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 语法
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论