主鍵和外來鍵
前段時間發連連一個查詢資料庫主外來鍵關係的文章(http://space6212.itpub.net/post/12157/107584),但有個缺點:不能一目瞭然地檢視多層級聯關係,故今天根據以前對sql作了一些改進,以樹狀結構顯式多層級聯關係,這對於處理設定了級聯刪除的表非常有用
SQL> select distinct * from (select ltrim(sys_connect_by_path(pk_table||'('||pk_col||')','->'),'->') pk_fk from (
2 select
3 pk_table,
4 fk_table,
5 pk_col
6 from
7 (select
8 a.constraint_name pk_con,
9 a.table_name pk_table,b.column_name pk_col,
10 a.owner pk_owner
11 from user_constraints a,user_cons_columns b
12 where (a.constraint_type='P' or a.constraint_type='U')
13 and a.constraint_name=b.constraint_name
14 and a.owner=b.owner) pk,
15 (select c.constraint_name fk_con,
16 c.table_name fk_table,
17 d.column_name fk_col,
18 c.R_OWNER r_pk_owner,
19 c.R_CONSTRAINT_NAME r_pk_con,
20 c.owner fk_owner
21 from user_constraints c,user_cons_columns d
22 where c.constraint_type='R'
23 and c.constraint_name=d.constraint_name
24 and c.owner=d.owner) fk
25 where
26 pk.pk_owner=fk.r_pk_owner(+)
27 and pk.pk_con=fk.r_pk_con(+)
28 order by pk.pk_con
29 )
30 connect by prior fk_table=pk_table ) t where instr(pk_fk,'->')>0 order by 1
31 ;
PK_FK
--------------------------------------------------------------------------------
T1(ID)->T2(NEWT2ID)
T1(ID)->T2(NEWT2ID)->T3(ID)
T1(ID)->T3(ID)
T2(NEWT2ID)->T3(ID)
由於在9i中sys_connect_by_path函式不能處理有迴圈對記錄集,故本例子只適合不會迴圈關聯的表(如引用自身表的外來鍵)
10g中sys_connect_by_path加入了對迴圈情況對處理,等手頭有了10g環境再測試一下
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63709/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 新的主鍵和外來鍵的語法
- 通過外來鍵找主鍵
- indexedDB 內鍵與外來鍵Index
- sqlserver外來鍵SQLServer
- 10.30 索引,外來鍵索引
- 外來鍵約束
- MYSQL的外來鍵MySql
- Django(15)外來鍵和表關係Django
- 外來鍵的變種
- 約束外來鍵筆記筆記
- django外來鍵如何賦值Django賦值
- mysql建立外來鍵語句MySql
- 為什麼不用外來鍵
- 關於外來鍵約束
- openGauss-外來鍵鎖增強
- 實現 MongoDB 外來鍵關聯MongoDB
- 主鍵命名
- 《資料庫系統概論》5.0——常見約束 大學生學習筆記(主鍵 外來鍵)資料庫筆記
- Javaweb-約束-外來鍵約束JavaWeb
- 教你mysql如何增加外來鍵約束MySql
- AppBoxFuture(七): 分散式外來鍵約束APP分散式
- 資料庫:外來鍵是什麼資料庫
- oracle外來鍵約束的總結Oracle
- postgresql重置序列和自增主鍵SQL
- mysql-刪除和新增主鍵MySql
- django | 為 model 定義邏輯外來鍵Django
- 通過外來鍵連線多個表
- 為什麼大家很少使用外來鍵了?
- 主鍵分類
- 細分主鍵
- 資料庫主鍵、從鍵(易懂版)資料庫
- SqlServer主鍵和自增長設定SQLServer
- Typescript 下 Mongoose 外來鍵型別&外來鍵陣列型別定義&型別保護&聯合型別理解TypeScriptGo型別陣列
- 主鍵為聯合主鍵時,索引B+樹結構索引
- 20240722-0725 資料庫外來鍵報錯資料庫
- mysql不能新增外來鍵約束怎麼辦MySql
- 如果新增欄位是外來鍵,如何處理?
- Mysql truncate table時解決外來鍵關聯MySql