您可以使用INSERT语句往表中插入数据。
语法
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] [schema_name.]tbl_name [(col_name [, col_name] ...)] {VALUES | VALUE} (value_list) [, (value_list)] [ON DUPLICATE KEY UPDATE assignment_list] INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] [schema_name.]tbl_name SET assignment_list [ON DUPLICATE KEY UPDATE assignment_list] INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] [schema_name.]tbl_name [(col_name [, col_name] ...)] SELECT ... [ON DUPLICATE KEY UPDATE assignment_list] value_list: value [, value] ... value: {expr | DEFAULT} assignment_list: assignment [, assignment] ... assignment: col_name = value
语法限制
不支持使用以下语法。
- INSERT IGNORE ON DUPLICATE KEY UPDATE语法,例如:
INSERT IGNORE INTO tb (id) VALUES(7) ON DUPLICATE KEY UPDATE id = id + 1;
- PARTITION语法,例如:
INSERT INTO tb PARTITION (p0) (id) VALUES(7);
- 嵌套NEXTVAL的语法,例如:
INSERT INTO tb(id) VALUES(SEQ1.NEXTVAL + 1);
- 包含列名的语法,例如:
INSERT INTO tb(id1, id2) VALUES(1, id1 + 1);
分布式事务限制
说明 如果您的表是分表,但是事务执行过程中没有跨库(如INSERT或UPDATE带拆分键),则仍视为单库事务。关于分布式事务的更多说明,请参见分布式事务。
开启分布式事务时,不支持如下INSERT命令:
- 表没有定义主键,例如:
CREATE TABLE tb(id INT, name VARCHAR(10)); INSERT INTO tb VALUES(1, 'a');
- 表没有拆分,主键自增但没有使用Sequence。例如:
CREATE TABLE tb(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(10)); INSERT INTO tb(name) VALUES('a');
- 您可以指定该主键使用Sequence避免这条限制,例如:
CREATE TABLE tb(id INT PRIMARY KEY AUTO_INCREMENT BY GROUP, name VARCHAR(10)); INSERT INTO tb(name) VALUES('a');
相关文献
MySQL INSERT 语法。