查询DB2数据库约束

近期在做一个功能测试时,需要往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 ,这就确保每行都将包含一个雇员的姓。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值