查詢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 ,這就確保每行都將包含一個僱員的姓。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章