KDB表的主键生成

时间:2014-08-08 15:32:33

标签: kdb

有没有办法在KDB +中指定一个自动递增的主键列,就像传统的RMDS(比如Oracle的序列)一样? - 不需要在此列中插入,它将自动填充每个新记录。

3 个答案:

答案 0 :(得分:1)

表将自动具有名为“i”的隐藏(虚拟)递增列。

q)tab:([]col1:`a`b`c;col2:1 2 3)

q)select i,col1,col2 from tab
x col1 col2
-----------
0 a    1
1 b    2
2 c    3
q)
q)exec i from tab where col1=`b
,1

如果你需要加入这个,你可以这样:

q)tab2:([] index:2 3;col3:"yz")
q)
q)tab2
index col3
----------
2     y
3     z

q)(select index:i,col1,col2 from tab) lj 1!tab2
index col1 col2 col3
--------------------
0     a    1
1     b    2
2     c    3    y

这里有一些有用的信息http://code.kx.com/q4m3/8_Tables/

编辑 - “i”不是主键,但可以相应地进行操作

答案 1 :(得分:1)

KDB已经有一个用于内存表 - i列。它基本上是每行的从0开始的索引。

答案 2 :(得分:1)

虚拟列'i'只是列的索引。在所有情况下,我们都不能将它用作主键。对于前者如果我们从表中删除某些内容,如:

t:([] id:1 2 3)

select from t where i=1

    output--> id:2

让我们从t:

中删除一行
t:delete from t where i=1

select from t where i=1

    output--> id:3

它为您提供该索引处的行,而不是与某个列值对应的行(在本例中为主列)。因此,对于这种类型的操作,它不能用作主键。