有没有办法在KDB +中指定一个自动递增的主键列,就像传统的RMDS(比如Oracle的序列)一样? - 不需要在此列中插入,它将自动填充每个新记录。
答案 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
它为您提供该索引处的行,而不是与某个列值对应的行(在本例中为主列)。因此,对于这种类型的操作,它不能用作主键。