INSERT
描述
该语句用于向表中添加一个或多个记录。
使用限制及注意事项
不支持直接对子查询进行插入操作,例如 INSERT INTO (SELECT * FROM t1) VALUES(1, 1)。
权限要求
- 执行
INSERT语句,需要拥有目标表的INSERT权限。 - 执行
INSERT ... SELECT ...语句,不仅需要拥有目标表的INSERT权限,还需要拥有源表(即SELECT子句中涉及的表)的有SELECT权限。
有关 seekdb 权限的详细介绍,参见 seekdb 的权限分类。
语法
INSERT {into_table_insert | overwrite_table_insert};
into_table_insert:
[hint_options] [IGNORE] [INTO]
single_table_insert
[ON DUPLICATE KEY UPDATE update_asgn_list]
hint_options:
[/*+ [APPEND | DIRECT(bool, int, ['load_mode'])] enable_parallel_dml PARALLEL(N) | NO_DIRECT */]
load_mode:
full
| inc
| inc_replace
single_table_insert:
table_name [PARTITION (partition_name, ...)] [(column_list)] {VALUES | VALUE} (values_list)[, (values_list) ...]
| table_name [PARTITION (partition_name, ...)] [(column_list)] select_stmt
| table_name [PARTITION (partition_name, ...)] SET update_asgn_list
column_list:
column_name [,column_name ...]
values_list:
value [,value ...]
value:
expr
| DEFAULT
update_asgn_list:
column_name = expr [,column_name = expr ...]
overwrite_table_insert:
[/*+ PARALLEL(N)*/] OVERWRITE [INTO] table_name [(column_list)] [PARTITION (partition_name, ...)] select_stmt;
参数解释
| 参数 | 描述 |
|---|---|
| into_table_insert | 用于向表中插入数据。 |
| hint_options | 可选项,用于指定 Hint 选项,详细介绍可参见下文 hint_options。 |
| IGNORE | 可选项,指示在插入数据时发生的错误将会被忽略。 |
| INTO | 可选项,用来指示接下来是插入目标,可以省略。 |
| single_table_insert | 指定如何向表中插入数据。目前支持三种插入数据的方式,详细介绍可参见下文 single_table_insert。 |
| table_name | 指定要插入的表名。 |
| PARTITION (partition_name, ...) | 可选项,用于指定数据将被插入到表的哪个分区中,同时插入多个分区时以逗号(,)分隔。partition_name 表示插入表指定的分区名。 |
| column_list | 可选项,用于指定插入数据的列,同时插入多列时以逗号(,)分隔。 |
| column_name | 表示插入表指定列的列名称。 |
| ON DUPLICATE KEY UPDATE update_asgn_list | 可选项,指定对重复主键或唯一键的处理操作。
update_asgn_list 表示赋值语句,详细介绍可参见下文 update_asgn_list。 |
| overwrite_table_insert | 用于将查询结果替换表或分区中的现有数据,有关使用 INSERT OVERWRITE SELECT 语句的详细信息,参见 插入数据 中的 使用 INSERT OVERWRITE SELECT 语句插入数据 章节。 |
| select_stmt | 指定 SELECT 子句。有关查询语句的详细信息,参见 SELECT 语句。 |
hint_options
-
[APPEND | DIRECT(bool, int, [load_mode])] enable_parallel_dml PARALLEL(N):-
APPEND | DIRECT(bool, int, [load_mode]):可选项,使用 Hint 启用旁路导入功能。提示在执行旁路导入任务的过程中,不建议同时进行 seekdb 的升级操作,因为这可能导致旁路导入任务失败。
-
APPEND:默认等同于使用的DIRECT(true, 0),同时可以实现在线收集统计信息(GATHER_OPTIMIZER_STATISTICSHint)的功能。 -
DIRECT(bool, int, [load_mode]):-
bool:表示写入的数据是否需要排序。取值如下:true:表示需要排序。false:表示不需要排序。
-
int:表示最大容忍的错误行数。 -
load_mode:可选参数,表示旁路导入的模式。取值须使用英文单引号包起来,取值如下:-
full:默认值,表示全量导入。 -
inc:表示增量导入,支持INSERT和IGNORE语义。 -
inc_replace:表示增量导入,但不检查主键是否重复,相当于REPLACE语义的增量导入。提示当
load_mode取值为inc_replace时,INSERT语句中不允许有IGNORE关键字。
更多使用
INSERT INTO SELECT旁路导入的信息,参见 旁路导入概述。 -
-
-
-
enable_parallel_dml parallel(N):可选项,加载数据的并行度。信息一般情况下,
enable_parallel_dmlHint 和parallelHint 必须配合使用才能开启并行 DML。不过,当目标表的 Schema 上指定了表级别的并行度时,仅需指定enable_parallel_dmlHint。
-
-
NO_DIRECT:控制单条 SQL 强制不走旁路导入,只要输入的 SQL 带有该 Hint,则整个语句忽略其他旁路导入的 Hint,执行普通导入。
更多有关 Hint 的介绍信息,参见 Optimizer Hint。