如何在DB2中查找表的主键?

时间:2015-04-20 09:51:23

标签: db2 primary-key

我无法在DB2中获取主键。我使用了以下代码,但这对我不起作用。

选择TBCREATOR,TBNAME,NAME,KEYSEQ        来自SYSIBM.SYSCOLUMNS        在哪里TBCREATOR ='DSN8710'        AND TBNAME ='员工'        AND KEYSEQ> 0          按KEYSEQ排序;

此代码中TBCREATOR的含义是什么?如何根据我的情况修改TBCREATOR值?

1 个答案:

答案 0 :(得分:1)

我先回答你的上一个问题。 creator有时被称为schema。如果您熟悉Oracle,那么roughly analogous to a database user(虽然不完全正确)。

获取"主键"信息,你可能想知道哪个索引是"clustering" index(这通常是 ,但并不总是,确定磁盘上行的物理顺序)。

如何找到群集索引取决于您正在运行的平台:

大型机(z / OS):

SELECT
     RTRIM(name)    AS index_name
    ,RTRIM(creator) AS index_schema
    ,uniquerule
    ,clustering
FROM sysibm.sysindexes
WHERE tbname     = @table
  AND tbcreator  = @schema
  AND clustering = 'Y'

然后,要查看该索引中的实际列,请执行以下查询:

SELECT colname AS name
FROM sysibm.sysindexes a
JOIN sysibm.syskeys b
    ON a.name       = b.ixname 
    AND a.tbcreator = b.ixcreator 
WHERE a.name        = @index_name
    AND a.tbcreator = @index_schema
ORDER BY COLSEQ

的Linux / Unix /视窗:

SELECT
     RTRIM(indname)   AS index_name
    ,RTRIM(indschema) AS index_schema
    ,uniquerule
    ,indextype
FROM syscat.indexes
WHERE tabname     = @table
  AND tabschema = @schema
  AND indextype = 'CLUS'

然后,要查看该索引中的实际列,请执行以下查询:

SELECT colnames as name
FROM sysibm.sysindexes
WHERE name        = @index_name
    AND tbcreator = @index_schema
ORDER BY NAME

LUW将列列表作为一个字符串返回,由+分隔,这有点奇怪......