oracle中查询某张表都被哪些表参照了
起因:
系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错。比如警员信息,在考勤记录表里会引用警员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=''—此处输入刚才查询出来的表主键的约束名
oracle中查询某张表都被哪些表参照了的更多相关文章
- oracle中查询、禁用、启用、删除表外键
1.查询所有表的外键的: select table_name, constraint_name from user_constraints where constraint_type = 'R'; ...
- Oracle中把一张表查询结果插入到另一张表中
1. 新增一个表,通过另一个表的结构和数据 create table XTHAME.tab1 as select * from DSKNOW.COMBDVERSION 2. 如果表存在: inse ...
- Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令
Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令 ------------------------------------------------------------------ ...
- 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)
关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...
- ORACLE中dba,user,v$等开头的常用表和视图
一.Oracle表明细及说明1.dba_开头表 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents ...
- 如何在Oracle中 查询一个表被其他数据库对象引用[z]
这两天老大让我再oracle中把要替换的表被其他对象引用之处找出来,整理一份表,接到这个任务,我是一脸懵逼,怎么找?大海捞针么?问同事.查资料,自己研究,最后整理一下仅供大家参考,同时以备将来回顾.本 ...
- oracle 中查询当前用户可以看到的表名、表对应的所有字段 原
转自:https://my.oschina.net/u/3783799/blog/2870207 1.oracle 查询当前用户下的表名,表注释 select t.table_name, f.comm ...
- oracle中查看一张表是否有主键,主键在哪个字段上
利用Oracle中系统自带的两个视图可以实现查看表中主键信息,语句如下:select a.constraint_name, a.column_name from user_cons_columns a ...
- oracle中查询当前系统时间用到的dual是什么?
oracle我们查询当前系统时间的时候,经常用到dual,这个是什么东西呢? -- 查询系统时间 结果:2018/04/17 15:00:48 -- select sysdate from dual; ...
随机推荐
- Nginx + tornado + supervisor部署
参考链接:supervisor + Tornado + Nginx 使用详解, 用tornado ,Supervisord ,nginx架网站, tornado官方文档 项目文档树: . ├── ch ...
- java线程详解(一)
1,相关概念简介 (1)进程:是一个正在执行的程序.每一个进程执行都有一个执行的顺序,该顺序就是一个执行路径,或者叫一个控制单元.用于分配空间. (2)线程:就是进程中一个独立的控制单元,线程在控制着 ...
- 轻松实现ajax登录时让浏览器保存密码
将登录页面由form提交改为ajax提交,发现一个副作用——登录时浏览器不会提示是否保存密码,这样每次登录都要输入用户名/密码. html代码如下: <script> $(function ...
- C语言 数组 行优先 实现
C语言数组结构行优先顺序存储的实现 (GCC编译). /** * @brief C语言 数组 行优先 实现 * @author wid * @date 2013-11-02 * * @note 若代码 ...
- C#像运行一个exe 程序一样运行一个dll文件
[DllImport("kernel32.dll")] public static extern int WinExec(string exeName, int operType) ...
- 基于Criminisi算法的栅格影像数据敏感地物隐藏
栅格影像数据敏感地物伪装是指通过计算机智能识别与计算,将影像数据中的敏感地物进行识别与提取,将敏感地物智能替换成公共地物,如草地.森林.湖泊.公园等.但目前该技术并不成熟,同时栅格影像数据敏感地物伪装 ...
- [外挂1] MFC 鼠标位置设置
a.取得窗口相对坐标 b.读出游戏窗口信息GetWindowRect c.移动鼠标指针SetCursorPos HWND gameh;//游戏窗口句柄 RECT r1;//RECT结构表示一个矩 ...
- [JS9] document's bgColor改变背景颜色
<HTML> <HEAD> <TITLE>设置背景颜色</TITLE> </HEAD> <BODY> <CENTER> ...
- Wijmo 2016 V2 强势发布!
Angular 2 支持 Wijmo 对 Angular 2 提供了全面的支持.我们一直在紧跟Angular 2 开发团队的步伐,对其发布的最新候选版本提供支持. 了解更多关于Angular 2 的支 ...
- C#与数据库访问技术总结(十六)之 DataSet对象
DataSet对象 DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库. 并且,由于DataSet对象具有离线 ...