日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java 数据库外键查询_oracle中查询所有外键引用到某张表的记录

發布時間:2025/3/12 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 数据库外键查询_oracle中查询所有外键引用到某张表的记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其實查找這篇文章 ?我主要用的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(在聯合主鍵中的位置)來區別??梢愿鶕﨏ONSTRAINT_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=''—此處輸入剛才查詢出來的表主鍵的約束名

總結

以上是生活随笔為你收集整理的java 数据库外键查询_oracle中查询所有外键引用到某张表的记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。