KDB表的主键生成

KDB表的主键生成,kdb,Kdb,有没有一种方法可以在KDB+中指定一个主键列,它将自动递增,即与传统的RMD(例如Oracle的序列)中一样不需要在此列中插入,它将自动填充每个新记录。表将自动包含一个名为“i”的隐藏(虚拟)递增列 如果您需要加入,您可以这样做: 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

有没有一种方法可以在KDB+中指定一个主键列,它将自动递增,即与传统的RMD(例如Oracle的序列)中一样不需要在此列中插入,它将自动填充每个新记录。

表将自动包含一个名为“i”的隐藏(虚拟)递增列

如果您需要加入,您可以这样做:

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
这里有一些有用的信息


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

KDB已经有一个主键用于内存表中的
i
列。它基本上是每行基于0的索引。

虚拟列“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
它提供该索引处的行,而不是与某个列值(本例中为主列)对应的行。因此,对于此类操作,它不能用作主键

t:delete from t where i=1

select from t where i=1

    output--> id:3