DB2里面有一个内部的目录视图SYSCAT.REFERENCES,里面就保存着数据库每张表的每一个外键约束的信息,以下就是DB2 V8.2里面这个视图的定义:(SYSCAT.REFERENCES)
在不同的电脑使用的时候可能会有不同的效果,比如可以现在DB2的视图中查找到"REFERENCES"的一行,其中模式是SYSCAT,有可能无法直接打开视图,但是
可以右键然后点击显示相关内容,然后点击表就可以看到这个视图在数据库中维护的是一张名为SYSRELS的表,这张表就是上面所说的维护了该数据库中所有的约束信息,
包括not null,主键,外键等等
我的表中是这样子的:
TABNAME 和 REFTBNAME应该表示的时候两个有约束的表,TABNAME中有属性参照了REFTBNAME,有时候无法在表直接看出约束是因为属性的名称有可能会和
它去参照的表的那个属性的名称不同,例如:
这里表示的是EMPNO为EMPLOYEE表的主键,然后MGRNO是另一张表中的EMPNO的外键,通过这个操作就能够很容易的解决插入的时候主外键的约束问题,根据主外键去
针对表中信息或插入的信息进行修改即可,注意有时候约束可能是自己到自己的,那种情况直接在当前表中查看即可,注意相同的值
通过这个视图基本上就能轻易的查出一张表到底对哪些表存在外键约束依赖,或者被哪些表建立外键约束进行了引用。
如果四张表A、B、C、D的外键约束关系是D->C->B->A,即A是所有其它表的主表,其次是B、C、D,有什么方法可以从SYSCAT.REFERENCES视图获取到符合这个逻辑顺序的列表呢?我还没有想到,但是Quest Central for DB2里面的Extract DDL的功能就能根据这个关系来提取出,按照主从关系排序的表的创建、删除语句。有没有一个简单的、优美的SQL语句就能实现这个功能呢?