全部产品
云市场

INSERT

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

INSERT 用于往表中插入数据。

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

语法限制

以下语法不支持:

  • PARTITION 语法,例如:

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

    1. CREATE TABLE tb(id INT, name VARCHAR(10)) TBPARTITION BY HASH(id);
    2. INSERT INTO tb(name) VALUES('a');
    3. INSERT INTO tb VALUES(DEFAULT, 'a');
  • ON DUPLICATE KEY UPDATE 列表中修改拆分键的值,例如:

    1. CREATE TABLE tb(id INT PRIMARY KEY, name VARCHAR(10)) TBPARTITION BY HASH(name);
    2. INSERT INTO tb VALUES(1, 'a') ON DUPLICATE KEY UPDATE name = 'b';
  • 嵌套 NEXTVAL 的表达式,例如:

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

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

分布式事务限制

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

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

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

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

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

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

相关文献