如何在 DB2 中的 table 上查找主键?

How to find primary key on a table in DB2?

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

SELECT TBCREATOR、TBNAME、名称、KEYSEQ 来自 SYSIBM.SYSCOLUMNS 其中 TBCREATOR = 'DSN8710' 和 TBNAME = 'EMPLOYEE' 和键序列 > 0 按 KEYSEQ 排序;

这段代码中的TBCREATOR是什么意思,如何根据我的情况修改TBCREATOR的值?

我先回答你最后一个问题。 creator 有时被称为 schema。如果您熟悉 Oracle,这是 roughly analogous to a database user(尽管不完全是)。

就获取 "primary key" 信息而言,您可能想知道哪个索引是 "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/Windows:

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 returns 列列表作为一个字符串,由 + 分隔,这有点奇怪...