金仓数据库KingbaseES DML语句介绍 INSERT ALL FIRST
关键字:
KingbaseES、INSERT、INSERT ALL、INSERT FIRST;人大金仓;KingbaseES
INSERT ALL FIRST语句介绍
在KingbaseES数据库中,兼容了ORACLE的INSERT ALL | FIRST功能。使用该类语句,可以同时插入多表、或根据条件语句插入不同的表。本文将主要介绍以下内容:INSERT ALL | FIRST语法、INSERT ALL | FIRST基础用法。
INSERT ALL | FIRST语法
INSERT ALL语句可以选择是否使用WHERE条件,但INSERT FIRST必须使用WHERE条件。使用INSERT ALL | FIRST 语法执行插入次数由最后子查询决定。INSERT ALL 会在插入时向所有满足条件的表进行插入;INSERT FIRST则会向第一满足条件的表进行插入。
不使用条件的INSERT ALL语法如下:
INSERT ALL into_clause [into_clause].. subquery; into_clause ::= INTO [schema.]{table_name|view_name} [t_alias][(column_name [,column_name]..)] [values_clause] |
使用条件的INSERT ALL | FIRST
INSERT {ALL|FIRST} condition_clause [condition_clause].. condition_else_clause subquery; condition_clause ::= WHEN condition_expr THEN into_clause [into_clause].. condition_else_clause ::= [ELSE into_clause [into_clause]..] |
INSERT ALL | FIRST基础用法
接下来通过测试用例的方式展示INSERT ALL | FIRST的相关用法。
- 使用无条件的INSERT ALL可以插入同时向多表插入单条数据。
–创建待插入表t1、t2、t3 create table t1(id int, grade int); create table t2(id int, grade int); create table t3(id int, grade int); –向t1,t2,t3插入数据 insert all into t1 values (1,11) into t2 values (1,12) into t3 values (1,13) select 1; –查询表t1、t2、t3的数据,插入成功 select * from t1; select * from t2; select * from t3; |
- 使用无条件的INSERT ALL向表中插入多条数据
–向t1,t2,t3插入数据 insert all into t1 values (2,21) into t2 values (2,22) into t3 values (2,23) select generate_series(1,5); select * from t1; select * from t2; select * from t3; |
- 使用有条件的INSERT ALL进行插入, 在省略条件时,会与前面有条件的表的插入条件一致。
–执行下方语句会在产生序列值等于1时插入t1,产生序列值大于3时插入t2,t3 insert all when num=1 then into t1 values (num+2,21) when num>3 then into t2 values (num+2,22) into t3 values (num+2,23) select generate_series(1,5) as num; select * from t1; select * from t2; select * from t3; |
- 使用INSERT FIRST插入数据,会插入第一个符合条件的数据
–使用insert first插入,下方测试用例插入t2的实际条件是num>3 and num!=4 insert first when num=4 then into t1 values (num+7,41) when num>3 then into t2 values (num+7,42) else into t3 values (num+7,43) select generate_series(1,5) as num; –num=4时,t1才被插入 Select * from t1; –num=4时,不会被插入,使用INSERT ALL则会插入num=4的情况 Select * from t2; Select * from t3; |
- KingbaseES的INSERT ALL | FIRST支持使用partition关键字和分区表名的方式插入分区表。
–创建一个分区表 CREATE TABLE t5 (id INT, grade int ) PARTITION BY RANGE ( id ) ( PARTITION P5 VALUES LESS THAN ( 5 ), PARTITION P10 VALUES LESS THAN ( 10 ), PARTITION P15 VALUES LESS THAN ( 15 ) ); insert first when num<5 then into t5 partition (P5) values (num,11) when num<10 then into t5_P10 values (num,12) else into t5 values (num,13) select generate_series(1,14) as num; Select * from t5_p5; Select * from t5_p10; Select * from t5_p15; –使用这种方式插入时需要注意分区约束,上方语句更改为insert all将分区约束检查失败 insert all when num<5 then into t5 partition (P5) values (num,11) when num<10 then into t5_P10 values (num,12) else into t5 values (num,13) select generate_series(1,14) as num; |
总结
在KingbaseES中提供了INSERT ALL | FIRST命令插入多个表。在使用该命令时,需要注意INSERT ALL将插入所有满足条件的表,而INSERT FIRST只会插入第一个满足条件的表。插入命令执行次数由子查询的结果决定。
参考资料
《KingbaseES产品手册》