DB2 table 的 UNIQUE INDEX 未显示在 TABCONST 和 CONSTDEP table 中
DB2 table's UNIQUE INDEX not showing in TABCONST and CONSTDEP tables
我正在尝试使用下面的查询从 SYSCAT
表中查询某些用户表的唯一索引,该查询使用 4 个目录表(INDEXES
、INDEXCOLUSE
、TABCONST
, CONSTDEP
).我意识到所有索引都在 INDEXES
和 INDEXCOLUSE
表中,但其中许多索引在 TABCONST
和 CONSTDEP
表中丢失。
TABCONST
和 CONSTDEP
表中的数据丢失是否有任何原因?是否有一些程序可以从这些目录表中刷新数据?
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
;
备注
已编辑问题的标题:忘了说这都是关于 UNIQUE 索引而不仅仅是索引!
当您直接创建索引时,它不是一个约束:
CREATE UNIQUE INDEX myindex on mytab(mycol)
但是,如果您创建或更改 table 并使用 UNIQUE
声明单个列或多个列,则它是一个约束。
我正在尝试使用下面的查询从 SYSCAT
表中查询某些用户表的唯一索引,该查询使用 4 个目录表(INDEXES
、INDEXCOLUSE
、TABCONST
, CONSTDEP
).我意识到所有索引都在 INDEXES
和 INDEXCOLUSE
表中,但其中许多索引在 TABCONST
和 CONSTDEP
表中丢失。
TABCONST
和 CONSTDEP
表中的数据丢失是否有任何原因?是否有一些程序可以从这些目录表中刷新数据?
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
;
备注
已编辑问题的标题:忘了说这都是关于 UNIQUE 索引而不仅仅是索引!
当您直接创建索引时,它不是一个约束:
CREATE UNIQUE INDEX myindex on mytab(mycol)
但是,如果您创建或更改 table 并使用 UNIQUE
声明单个列或多个列,则它是一个约束。