加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何在DB2里面判断表之间的依赖关系

(2009-06-13 00:39:21)
标签:

db2

it

sql

外键

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:
  • A = NO ACTION
  • C = CASCADE
  • N = SET NULL
  • R = RESTRICT
UPDATERULE CHAR(1) Update rule:
  • A = NO ACTION
  • R = RESTRICT
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;

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有