select a.constraint_name, a.table_name, b.constraint_name
from user_constraints a, user_constraints b
where a.constraint_type = 'r' and b.constraint_type = 'p' and a.r_constraint_name = b.constraint_name
-- p 代表主鍵, r 代表外來鍵
查詢某一張表的約束:
select constraint_name from dba_cons_columns where table_name='表名';
這時可以對某一些約束執行某一些操作,如禁用(disable)、刪除(drop)或啟用(enable)
oracle 檢視乙個表對應的主鍵和外來鍵的約束關係,檢視的語句:
select a.owner 主鍵擁有者
,a.table_name 主鍵表
,b.column_name 主鍵列
,c.owner 外來鍵擁有者
,c.table_name 外來鍵表
,d.column_name 外來鍵列
from user_constraints a
left join user_cons_columns b
on a.constraint_name=b.constraint_name
left join user_constraints c
on c.constraint_name=a.constraint_name
left join user_cons_columns d
on c.constraint_name=d.constraint_name
and a.constraint_type='p'
and a.table_name='表名' --需要檢視主外來鍵關係的表
order by a.table_name
另外一種寫法:
select a.owner 外來鍵擁有者, a.table_name 外來鍵表, substr(c.column_name,1,127) 外來鍵列, b.owner 主鍵擁有者,
b.table_name 主鍵表, substr(d.column_name,1,127) 主鍵列
from user_constraints a, user_constraints b, user_cons_columns c, user_cons_columns d
where a.r_constraint_name=b.constraint_name
and a.constraint_type='r'
and b.constraint_type='p'
and a.r_owner=b.owner
and a.constraint_name=c.constraint_name
and b.constraint_name=d.constraint_name
and a.owner=c.owner
and a.table_name=c.table_name
and b.owner=d.owner
and b.table_name=d.table_name
user_constraints是表約束的檢視,描述的是約束型別(constraint_type)是什麼,屬於哪些表(table_name),如果約束的型別為r(外來鍵)的
話,那麼r_constraint_name欄位存放的就是被引用主表中的主鍵約束名。
檢視表結構: desc user_constraints;
user_cons_columns是表約束欄位的檢視,說明表中的和約束相關的列參與了哪些約束。這些約束有主鍵約束,外來鍵約束,索引約束.
兩者可以通過(owner,constraint_name,table_name)關聯
檢視表結構: desc user_cons_columns;
Oracle檢視主外來鍵
select a.constraint name,a.table name,b.constraint name from user constraints a,user constraints b where a.constraint type r and b.constraint type p a...
SQL主外來鍵約束
主鍵 primary key 唯一標示乙個實體。是保證資料庫的實體完整性,保證資料中資料的正確性和合理性,取值非空 唯一。外來鍵 foreign 是用來使表與表之間聯絡。用來保證資料庫的參照完整性,外來鍵的取值必須來自參照表參照列的 值,可以為空也可不為空。1 外來鍵取值規則 空值或參照的主鍵值。2...
oracle禁用觸發器,主外來鍵約束
alter table 表名 disable all triggers 禁用指定表相關的觸發器 alter table 表名 enable all triggers 啟用指定表相關的觸發器 select t.status,t.from user triggers t where t.table na...