如何在DB2里面判断表之间的依赖关系
(2009-06-13 00:39:21)
标签:
db2itsql外键fk |
分类: 经验汇总 |
在数据库里面,为了保证数据的有效和一致,通常都会在不同的表之间建立外键约束。这样虽然达到保证一致性的要求,但是如果需要清理数据或者初始化数据就会遇到麻烦,不根据表的外键约束得出表的主从关系当然不能随便的删除或者导入数据!
DB2里面有一个内部的目录视图SYSCAT.REFERENCES,里面就保存着数据库每张表的每一个外键约束的信息,以下就是DB2 V8.2里面这个视图的定义:(SYSCAT.REFERENCES)
Column Name | Data Type | Nullable | Description |
---|---|---|---|
CONSTNAME | VARCHAR(18) | Name of the constraint. | |
TABSCHEMA | VARCHAR(128) | Qualified name of the table. | |
TABNAME | VARCHAR(128) | ||
DEFINER | VARCHAR(128) | User who created the constraint. | |
REFKEYNAME | VARCHAR(18) | Name of parent key. | |
REFTABSCHEMA | VARCHAR(128) | Qualified name of the parent table. | |
REFTABNAME | VARCHAR(128) | ||
COLCOUNT | SMALLINT | Number of columns in the foreign key. | |
DELETERULE | CHAR(1) | Delete rule:
|
|
UPDATERULE | CHAR(1) | Update rule:
|
|
CREATE_TIME | TIMESTAMP | The timestamp when the referential constraint was defined. | |
FK_COLNAMES | VARCHAR (640) | List of foreign key column names. Warning: This column will be removed in the future. Use SYSCAT.KEYCOLUSE for this information. | |
PK_COLNAMES | VARCHAR (640) | List of parent key column names. Warning: This column will be removed in the future. Use SYSCAT.KEYCOLUSE for this information. |
通过这个视图基本上就能轻易的查出一张表到底对哪些表存在外键约束依赖,或者被哪些表建立外键约束进行了引用。
如果四张表A、B、C、D的外键约束关系是D->C->B->A,即A是所有其它表的主表,其次是B、C、D,有什么方法可以从SYSCAT.REFERENCES视图获取到符合这个逻辑顺序的列表呢?我还没有想到,但是Quest Central for DB2里面的Extract DDL的功能就能根据这个关系来提取出,按照主从关系排序的表的创建、删除语句。有没有一个简单的、优美的SQL语句就能实现这个功能呢?
给一句简单的查询指定模式名下的表的外键情况:
select constname,fk_colnames,tabschema,tabname,reftabschema, reftabname,refkeyname,pk_colnames from SYSCAT.REFERENCES where reftabschema='MYSCHEMA' order by reftabname;
前一篇:"彤"言"智"语 22
后一篇:"彤"言"智"语 23