近期在做一个功能测试时,需要往DB2数据库中插入一条数据,插入时,一直报“......SQLERRMC=WCSADMIN.MANIFEST.F_428,.....”错误,通过DbVisualizer Personal工具查看该表,显示有一个 F_428外键约束,但是无奈,就是不知道具体是哪一列(或哪几列,本人对这个系统整体数据库结构还不是很熟悉)!!上网搜了一下,得到一遍很实用的文章,得到答案:
通过 “select * from syscat.references where tabname = ‘.....’ ” 查询得到这张表的所有外键,这里就记录了具体是哪些列进行了外键约束!可以根据这个来调整各列的值。
摘抄过来,备用:
SYSCAT.CHECKS
为每个表检查约束包含一行记录
db2 select constname, tabname, text from syscat.checks
SYSCAT.COLCHECKS
为表检查约束所引用的每一列包含一行记录
db2 select constname, tabname, colname, usage from syscat.colchecks
SYSCAT.COLUMNS
NULLS
指明一列是可为空(Y)还是不可为空(N)
db2 select tabname, colname, nulls from syscat.columns where tabschema = 'MELNYK' and nulls = 'N'
SYSCAT.CONSTDEP
为某些其他对象上的约束的每个依赖性包含一行记录
db2 select constname, tabname, btype, bname from syscat.constdep
SYSCAT.INDEXES
为每个索引包含一行记录
db2 select tabname, uniquerule, made_unique, system_required from syscat.indexes where tabschema = 'MELNYK'
SYSCAT.KEYCOLUSE
为惟一、主键或外键约束定义的键中所包含的每个列包含一行记录
db2 select constname, tabname, colname, colseq from syscat.keycoluse
SYSCAT.REFERENCES
为每个参照约束包含一行记录
db2 select constname, tabname, refkeyname, reftabname, colcount, deleterule, updaterule from syscat.references
SYSCAT.TABCONST
为每个惟一(U)、主键(P)、外键(F)或表检查(K)约束包含一行记录
db2 select constname, tabname, type from syscat.tabconst
SYSCAT.TABLES
PARENTS
该表的父表数目(该表在其中充当子表的参照约束数目)
db2 "select tabname, parents from syscat.tables where parents > 0"
SYSCAT.TABLES
CHILDREN
该表的子表数目(该表在其中充当父表的参照约束数目)
db2 "select tabname, children from syscat.tables where children > 0"
SYSCAT.TABLES
SELFREFS
该表的自引用参照约束数目(该表在其中既充当父表又充当子表的参照约束数目)
db2 "select tabname, selfrefs from syscat.tables where selfrefs > 0"
SYSCAT.TABLES
KEYUNIQUE
在该表上所定义的惟一约束(除了主键)的数目
db2 "select tabname, keyunique from syscat.tables where keyunique > 0"
SYSCAT.TABLES
CHECKCOUNT
在该表上所定义的检查约束的数目
db2 "select tabname, checkcount from syscat.tables where checkcount > 0"
“不能为空值!” - 非空约束
非空约束(NOT NULL constraint)防止向一列添加空值。这就确保了该列在表中每一行都存在一个有意义的值。例如,SAMPLE 数据库中 EMPLOYEE 表的定义包括 LASTNAME VARCHAR(15) NOT NULL ,这就确保每行都将包含一个雇员的姓。