【发布时间】:2014-08-08 15:32:32
【问题描述】:
有没有办法在 KDB+ 中指定一个自动递增的主键列,即像在传统的 RMDS(比如 Oracle 的序列)中一样? - 不需要在此列中插入,它将自动填充每条新记录。
【问题讨论】:
标签: kdb
有没有办法在 KDB+ 中指定一个自动递增的主键列,即像在传统的 RMDS(比如 Oracle 的序列)中一样? - 不需要在此列中插入,它将自动填充每条新记录。
【问题讨论】:
标签: kdb
表格将自动有一个隐藏的(虚拟)递增列,称为“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”不是主键,但可以进行相应操作
【讨论】:
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
它为您提供该索引处的行,而不是与某个列值对应的行(在这种情况下为主列)。所以对于这样的操作,它不能作为主键。
【讨论】: