【问题标题】:Primary key generation for KDB tableKDB 表的主键生成
【发布时间】:2014-08-08 15:32:32
【问题描述】:

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

【问题讨论】:

    标签: kdb


    【解决方案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”不是主键,但可以进行相应操作

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        虚拟列“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
        

        它为您提供该索引处的行,而不是与某个列值对应的行(在这种情况下为主列)。所以对于这样的操作,它不能作为主键。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-12-23
          • 2020-01-04
          • 1970-01-01
          • 2014-12-10
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多