描述
该语句用于添加一个或多个记录到表中。
格式
INSERT [hint_options] single_table_insert
single_table_insert:
{ INTO insert_table_clause opt_nologging '(' column_list ')' values_clause [{ RETURNING | RETURN } returning_exprs [into_clause]]
| INTO insert_table_clause opt_nologging '(' ')' values_clause [{ RETURNING | RETURN } returning_exprs [into_clause]]
| INTO insert_table_clause opt_nologging values_clause [{ RETURNING | RETURN } returning_exprs [into_clause]]
}
opt_nologging: { NOLOGGING | /*EMPTY*/ }
returning_exprs:
projection [, ...]
into_clause:
{ INTO into_var_list | BULK COLLECT INTO into_var_list}
into_var_list:
{ USER_VARIABLE | ref_name } [, ...]
参数解释
参数 | 描述 |
---|---|
hint_options | 指定 hint 选项。 |
insert_table_clause | 指定的插入的表,可以是基表、可更新视图、特殊子查询。 |
opt_nologging | 尽量减少插入时的日志信息 |
column_list | 指定要插入的列名。 |
returning_exprs | 返回插入数据之后的投影列。 |
into_clause | 将插入数据之后的列值插入到指定列表中。 |
注意
特殊子查询指的类似于可更新视图对应的子查询,这类子查询不应该包含复杂的算子(比如group by/distinct/window function等)
示例
示例表及数据基于以下定义:
OceanBase(admin@test)>create table t1(c1 int primary key, c2 int);
Query OK, 0 rows affected (0.16 sec)
OceanBase(admin@test)>select * from t1;
Empty set (0.02 sec)
- 单表插入:向表 t1 中插入一行数数据。
OceanBase(admin@test)>insert into t1 values(1,1);
Query OK, 1 row affected (0.01 sec)
OceanBase(admin@test)>select * from t1;
+----+------+
| c1 | c2 |
+----+------+
| 1 | 1 |
+----+------+
1 row in set (0.04 sec)
- 单表插入:直接向子查询中插入数据
OceanBase(admin@test)>insert into (select * from t1) values(1,1);
Query OK, 1 row affected (0.01 sec)
OceanBase(admin@test)>select * from t1;
+----+------+
| C1 | C2 |
+----+------+
| 1 | 1 |
+----+------+
1 row in set (0.01 sec)
- 单表插入:包含returning子句。
OceanBase(admin@test)>insert into t1 values(1,1) returning c1;
+----+
| C1 |
+----+
| 1 |
+----+
1 row in set (0.02 sec)
OceanBase(admin@test)>select * from t1;
+----+------+
| C1 | C2 |
+----+------+
| 1 | 1 |
+----+------+
1 row in set (0.01 sec)