近期在做一個功能測試時,需要往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 ,這就確保每行都將包含一個僱員的姓。