set类型的使用
关键字:
1. set类型概述
set类型是一种字符串的对象,他可以有0个或多个值,他的值来自于一开始创建的这个表的时候规定好的一系列的值,定义这些set值的时候,set值之间互相用逗号隔开,因此,set成员值不可以是逗号本身,set中的字符串内几乎可以兼容任何数据类型,例如常见的字符类、整数类甚至是布尔类或者是空值,都可以存储在定义的set类型里面。set最多可以存储64个成员值,并且set类型和enum枚举类型非常相似,但是最大的区别就是set类型可以多选,而enum类型只能单选。并且在我们插入数据的时候,如果set类型中不包含要插入的数据,也是会报错的。
2.set类型的使用
create type col1 as set('1','a','@','中国','','null');
此时,也可以在表中进行调用该类型,并且在表中插入数据时,也需要插入对应的字符串类型,否则就会报语法错误。
这里插入数据时有一个需要注意的点,当插入单独的阿拉伯数字时,插入的情况比较特殊,并且上述create type引用的方式不支持这种写法上,因此使用在表中创建set类型来介绍,下面来逐一学习
create table t22 (b set ('1','a','qewr','阿斯'));
insert into t22 values (0),(1),(2),(3),(4),(5),(6),(7);
可以看到,当插入的是阿拉伯数字0时,对应的是单独的空值
当插入的是阿拉伯数字1时,对应的是set中的‘1’,并且1=2^0
当插入的是阿拉伯数字2时,对应的是set中的‘a’,并且2=2^1
当插入的是阿拉伯数字3时,对应的是set中的1与a的组合,并且3=2^0+2^1
当插入的是阿拉伯数字4时,对应的是set中的‘qwer’,并且4=2^2
当插入的是阿拉伯数字5时,对应的是set中的1与qwer的组合,并且5=2^0+2^2
。。。
由此可以推出
第一位对应的是2的0次方,第二位对应的是2的1次方,第三位对应的是2的2次方,以此类推,并且除了0是插入空值外,其余的阿拉伯数字1对应的是0次方,2对应的是1次方,3对应的是0次方加1次方,那么就是对应位置的值组合起来插入。
那如果插入的数值超出了这些数值对应的值的和的话,会提示插入的数值是不合法的,但是,仍然能插入成功,且插入的值会往后顺延之前的规律。如下图所示。
参考资料
《KingbaseES SQL语言参考手册》




