简体   繁体   English

TABCONST和CONSTDEP表中未显示DB2表的UNIQUE INDEX

[英]DB2 table's UNIQUE INDEX not showing in TABCONST and CONSTDEP tables

I am trying to query the unique indices from SYSCAT tables for some user tables using the query below which uses 4 catalog tables ( INDEXES , INDEXCOLUSE , TABCONST , CONSTDEP ). 我想查询从唯一索引SYSCAT表使用下面,它使用4个目录表(查询一些用户表INDEXESINDEXCOLUSETABCONSTCONSTDEP )。 I realized all indices are there in INDEXES and INDEXCOLUSE tables but many of them are missing in TABCONST and CONSTDEP tables. 我意识到所有索引都位于INDEXESINDEXCOLUSE表中,但TABCONSTCONSTDEP表中却缺少许多CONSTDEP

Is there any reason for having data missing in TABCONST and CONSTDEP tables? TABCONSTCONSTDEP表中是否缺少数据? Is there some procedure to refresh the data from those catalog tables? 是否有一些步骤可以刷新那些目录表中的数据?

SELECT
    T.TABSCHEMA AS TABLE_SCHEMA,
    T.TABNAME AS TABLE_NAME,
    CASE T.TYPE
        WHEN 'F' THEN 'Foreign Key'
        WHEN 'I' THEN 'Functional Dependency'
        WHEN 'K' THEN 'Check'
        WHEN 'P' THEN 'Primary Key'
        WHEN 'U' THEN 'Unique'
    END AS TYPE,
    I.INDSCHEMA AS INDEX_SCHEMA,
    I.INDNAME AS INDEX_NAME,
    U.COLNAME AS COLUMN_NAME,
    U.COLSEQ AS COLUMN_ORDINAL,
    CASE U.COLORDER
        WHEN 'A' THEN 'Ascending'
        WHEN 'D' THEN 'Descending'
        WHEN 'I' THEN 'Included (unordered)'
    END AS COLUMN_SORRING
FROM
    SYSCAT.TABCONST T
    INNER JOIN
    SYSCAT.CONSTDEP C
    ON T.CONSTNAME = C.CONSTNAME
    INNER JOIN
    SYSCAT.INDEXES I
    ON
        C.BSCHEMA = I.INDSCHEMA AND
        C.BNAME = I.INDNAME
    INNER JOIN
    SYSCAT.INDEXCOLUSE U
    ON
        I.INDSCHEMA = U.INDSCHEMA AND
        I.INDNAME = U.INDNAME
WHERE
    TRIM(UPPER(T.TABSCHEMA)) = 'MYSCHEMA' AND
    TRIM(UPPER(T.TABNAME)) = 'MYTABLE'AND
    C.BTYPE = 'I'
--INDICES ONLY
ORDER BY
    T.TABSCHEMA,
    T.TABNAME,
    I.INDSCHEMA,
    I.INDNAME
;

Notes 笔记

Edited question's title: Forgot to mention this is all about UNIQUE index instead of just index! 编辑问题的标题:忘记提及这是关于唯一索引的全部,而不仅仅是索引!

When you create an index directly it is not a constraint: 直接创建索引时,它不是约束:

CREATE UNIQUE INDEX myindex on mytab(mycol)

However, if you create or alter a table and use UNIQUE to declare a single column or several as such, then it is a constraint. 但是,如果创建或更改表并使用UNIQUE声明一个或多个单个列,则这是一个约束。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM