其實查找這篇文章 我主要用的sql 是這句 select * from user_cons_columns t where t.constraint_name like 'FK_CTS_CONT_REINS__CRR';
起因:
系統測試的時候發現如果某條記錄已經被引用了,這個時候删除這條記錄會引起資料不一緻,系統會報錯。比如警員資訊,在考勤記錄表裡會引用警員ID,如果考勤記錄表中已經存在這個警員ID了,這時從警員表中删除該警員,就會引起資料不一緻,前台報錯。是以,這個時候我就想查找資料庫中所有引用這個ID的表
一:限制類型簡介
限制用于確定資料庫資料滿足特定的商業邏輯或者企業規則,如果定義了限制,并且資料不符
合限制,那麼DML操作(INSERT、UPDATE、DELETE)将不能成功執行。限制包括NOT NULL、UNIQUE、PRIMARY KEY、FOREING KEY 以及CHECK等五種類型
NOT NULL限制:
NOT NULL 限制強制列不接受 NULL 值。
UNIQUE限制:
UNIQUE 限制唯一辨別資料庫表中的每條記錄。
PRIMARY KEY 限制:
PRIMARY KEY 限制唯一辨別資料庫表中的每條記錄。主鍵必須包含唯一的值。
每個表應該都一個主鍵,并且每個表隻能有一個主鍵。主鍵列不能包含 NULL 值。
FOREING KEY限制:
外部鍵列的資料必須在主表的主鍵列(或惟一列)中存在,或者為NULL,
CHECK限制:
CHECK 限制用于限制列中的值的範圍。
如果對單個列定義 CHECK 限制,那麼該列隻允許特定的值。
如果對一個表定義 CHECK 限制,那麼此限制會在特定的列中對值進行限制。
二:Oracle資料字典中檢視限制資訊
1、我們建立的對象可以從"USER_"開通的視圖中檢視。如果在模式中建立了10張表,那麼從USER_TABLES中查詢将傳回10行,每一行是關于一張表的特性資訊
USER_TABLES不能檢視非目前使用者模式下建立的表。
ALL_TABLES視圖不但顯示目前使用者模式下建立的表,而且顯示授權能夠通路的表資訊
我們關心的視圖以下列字首命名:
·USER_ 目前使用者模式下建立的對象
·ALL_ 目前使用者模式下建立的對象加上目前使用者能通路的其他使用者建立的對象。ALL視圖常常包含一個"OWNER"列,反映出能夠通路的對象的所有者。在USER_TABLES表中不能看到OWNER列是因為你就是在這個視圖中所有表的所有者;在ALL_TABLES中有一個OWNER字段。
·DBA_ 它提供了整個資料庫的資訊。包括資料庫中所有表的名字和擁有者——包括SYS模式下的基本表
這些字首在限制我們想看到的、需要看到的、應當被允許看到的範圍上是一個幫助。檢視目前模式下建立的表,查詢USER_TABLES;
檢視所有我們建立的表以及被授權可以從其他使用者模式下通路的表,查詢ALL_TABLES;
具有DBA或SELECT_CATALOG_ROLE角色的使用者可以查詢DBA_TABLES來查詢資料庫中所有表的清單;
不是所有視圖下都有一個USER、ALL、和DBA字首,有一些視圖僅存在于dba視圖範圍。比如:DBA_DATA_FILES。
在開發環境中有時會通路DBA視圖,允許開發人員探究Oracle資料字典是沒有害處的。你可以在不擁有DBA角色的情況下獲得這個權限。一般,把CONNECT和RESOURCE角色給應用開發者,他不能通路這些,你可以把SELECT ANY TABLE權限或SELECT_CATALOG角色賦給一個使用者,這樣他将被允許通路整個資料字典。
一個人對資料字典了解的越多,越能接觸到資料庫中複雜的操作,越能對SQL語句優化敏感。
2、資料字典視圖:概要
在資料字典視圖中有一些隐含的關系。發現這些關系常常是使用SQL查詢對資料字典驗證的結果,幸運的是,在資料字典中有許多使用名稱的特征。
例如:USER_TABLES表中每一個表包含一個單獨的行。每一行包含一張表的詳細資訊,比如表的實體存儲參數。這些資料提供的擴充資訊告訴你表是怎麼增長的。
USER_TAB_COLUMNS視圖中在USER_TABLES表中的每一張表的每一行包含一條記錄。如果一張表有10個字段,那麼,你将在USER_TAB_COLUMNS表中找到10行記錄,是關于每一字段的詳細資訊。比如字段資料類型。字段名TABLE_NAME在USER_TABLE 和USER_TAB_COLUMNS表中都有,是以可以很容易的把他們連接配接起來。
USER_OBJECTS 使用者對象視圖
ALL_OBJECTS 所有對象視圖
DBA_OBJECTS DBA對象視圖
USER_SEQUENCES 使用者序列對象視圖,在USER_SEQUENCES的記錄也會出現在USER_OBJECTS表中
3、限制視圖
有兩個資料字典視圖提供了限制的詳細資訊。USER_CONSTRAINTS和USER_CONS_COLUMNS.
一張表可能有也可能沒有限制,對于一張表的每一個限制在USER_CONSTRAINTS中都有一條記錄描述這個限制。包括限制應用到的表名稱。如果你知道限制名想知道限制類型,查詢USER_CONSTRAINTS表。這個視圖描述了限制的定義。它不提供限制定義在哪些字段名稱上。USER_CONSTRAINTS中CONSTRAINT_NAME中表示限制名,如果建立表的時候沒有指定限制名,系統預設的限制名類似“SYS_C006274”這樣的一串字母。R_CONSTRAINT_NAME是外鍵引用表主鍵的限制名。CONSTRAINT_TYPE字段中P:表示主鍵,R:表示外鍵,C表示NOT NULL或CHECK,U表示UNIQUE
在USER_CONS_COLUMNS視圖中顯示限制的字段名稱。如果主鍵是個聯合主鍵,這個視圖中将有這個限制的兩條記錄。聯合主鍵的每一個字段對應一條記錄。每一條記錄通過POSITION(在聯合主鍵中的位置)來差別。可以根據CONSTRAINT_NAME字段将USER_CONSTRAINTS和USER_CONS_COLUMNS關聯起來。
三:得到想要的結果
分為兩步:
//查詢表的主鍵限制名
select * from user_constraints e where e.table_name=’’—-處輸入表名
//查詢所有引用到該主鍵的記錄
select b.table_name,b.column_name from user_constraints a
inner join user_cons_columns b
on a.constraint_name = b.constraint_name
where a.r_constraint_name=''—此處輸入剛才查詢出來的表主鍵的限制名