全部产品
云市场

REPLACE

更新时间:2019-03-04 14:51:23

REPLACE 用于往表中插入行或替换表中的行。

  1. REPLACE [LOW_PRIORITY | DELAYED]
  2. [INTO] [schema_name.]tbl_name
  3. [(col_name [, col_name] ...)]
  4. {VALUES | VALUE} (value_list) [, (value_list)]
  5. REPLACE [LOW_PRIORITY | DELAYED]
  6. [INTO] [schema_name.]tbl_name
  7. SET assignment_list
  8. REPLACE [LOW_PRIORITY | DELAYED]
  9. [INTO] [schema_name.]tbl_name
  10. [(col_name [, col_name] ...)]
  11. SELECT ...
  12. value_list:
  13. value [, value] ...
  14. value:
  15. {expr | DEFAULT}
  16. assignment_list:
  17. assignment [, assignment] ...
  18. assignment:
  19. col_name = value

语法限制

以下语法不支持:

  • PARTITION 语法,例如:

    1. REPLACE INTO tb PARTITION (p0) (id) VALUES(7);
  • 拆分键不是自增键时,VALUES 从句中没有指定拆分键的值,或者指定的值为DEFAULT。例如:

    1. CREATE TABLE tb(id INT, name VARCHAR(10)) TBPARTITION BY HASH(id);
    2. REPLACE INTO tb(name) VALUES('a');
    3. REPLACE INTO tb VALUES(DEFAULT, 'a');
  • 嵌套 NEXTVAL 的表达式,例如:

    1. REPLACE INTO tb(id) VALUES(SEQ1.NEXTVAL + 1);
  • 包含列名的表达式,例如:

    1. REPLACE INTO tb(id1, id2) VALUES(1, id1 + 1);

分布式事务限制

开启分布式事务时,以下功能REPLACE不支持:

  • 表没有定义主键,例如:

    1. CREATE TABLE tb(id INT, name VARCHAR(10));
    2. REPLACE INTO tb VALUES(1, 'a');
  • 表没有拆分,主键自增但没有使用Sequence。例如:

    1. CREATE TABLE tb(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(10));
    2. REPLACE INTO tb(name) VALUES('a'); #不支持

    可以指定该主键使用Sequence避免这条限制,例如:

    1. CREATE TABLE tb(id INT PRIMARY KEY AUTO_INCREMENT BY GROUP, name VARCHAR(10));
    2. REPLACE INTO tb(name) VALUES('a'); #支持

相关文献