INSERT
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
语法限制
以下语法不支持:
PARTITION 语法,例如:
INSERT INTO tb PARTITION (p0) (id) VALUES(7);
拆分键不是自增键时,VALUES 从句中没有指定拆分键的值,或者指定的值为DEFAULT。例如:
CREATE TABLE tb(id INT, name VARCHAR(10)) TBPARTITION BY HASH(id);
INSERT INTO tb(name) VALUES('a');
INSERT INTO tb VALUES(DEFAULT, 'a');
ON DUPLICATE KEY UPDATE 列表中修改拆分键的值,例如:
CREATE TABLE tb(id INT PRIMARY KEY, name VARCHAR(10)) TBPARTITION BY HASH(name);
INSERT INTO tb VALUES(1, 'a') ON DUPLICATE KEY UPDATE name = 'b';
嵌套 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 语法
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论