oracle中查詢某張表都被哪些表參照了

2021-09-08 16:51:00 字數 3296 閱讀 6381

起因:

系統測試的時候發現如果某條記錄已經被引用了,這個時候刪除這條記錄會引起資料不一致,系統會報錯。比如警員資訊,在考勤記錄表裡會引用警員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 約束,那麼此約束會在特定的列中對值進行限制。

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=''—此處輸入剛才查詢出來的表主鍵的約束名

Oracle設定某張表為唯讀

oracle 11g開始支援設定某張表為唯讀,這樣可以防範對某些表的修改,起到一定的安全性。設定如下 設定表為唯讀許可權 加鎖 alter table tab name read only 設定表的讀寫許可權 解鎖 alter table tab name read write 當表需要進行更新 增...

Oracle中恢復某張表丟失資料的方法

oracle中恢復某張表丟失資料的方法 2010 05 15 16 55 利用oracle資料庫的scn進行恢復,oracle資料庫每隔5分鐘,系統會產生乙個系統時間標記與scn的匹配並存入sys.smon scn time表中。我們對這個備份機制做如下測試 查詢出來資料 select t.t.ro...

oracle中用SQL語句對某張表進行備份還原

1.備份跟原表一樣的資料 select into ct rec questions beif from ct rec questions 2.還原表結構一模一樣的資料 insert into ct rec questions select from ct rec questions beif 3.還...