欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系。外键涉及到两个表,其中一个称之为父项表,另一个称之为子项表。 父项表 ( par

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

Oracle中表的外键是保证系统参照完整性的手段,而参照完整性是指分布在两个表中的列所满足的具有主从性质的约束关系。外键涉及到两个表,其中一个称之为父项表,另一个称之为子项表。

父项表( parent table )是参照约束的基础,即通过检查这张表的有效数据情况来判断约束是否成立,它是参照约束的条件,影响约束,而不受约束的任何影响。

子项表( child table )是参照约束的对象,当其发生变化,如有新数据输入时,通过比较父项表中的有效数据状况,来判断这些变化是否符合约束条件,若不符合,则拒绝要发生的变化。

在实际应用系统中,开发者为了保证系统的完整性,一般要定义大量的外键。然而,如果外键的命名不规范,如采用系统自动生成的名称,则在以后的系统运行维护中会造成很大的麻烦。如在系统运行后,加载大量数据或者进行一些数据转换操作等时,出现外键错误时,根据系统提示的外键错误,根本不可能直接定位到那两个表间的外键发生错误,需要浪费很多时间查找造成错误发生的外键的父项表和子项表,然后才能进一步确定是那条记录违反了外键约束条件。通常,我们采用这样的命名规则来命名外键 FK_Child_table name_Parent_table name 。由于外键名称的最大长度限制在 30 个字符之内,对 child_table_name 和 Parent_table name 不一定和原表一模一样,可以采取一些简写的办法,但名称一定要能反映出约束的两个表。这里的命名, Child_table name 指子项表,也就是约束表, Parent_table name 是指父项表,也就是被约束的表。

下面来详细讨论如何将应用系统中不规范的外键命名修改为规范的外键名称。在讨论之前,需要提醒读者注意的是,完成下面的操作需要花费较长的时间,所以一定要规划在系统空闲时来完成。同时这里的外键更名,采用的方法是首先删除然后重建,涉及到删除应用系统对象的操作,所以在操作之前,为安全起见,应该备份应用系统。

一、生成系统目前的外键报告单

首先生成系统目前模式下的所有外键情况报告单, SQL 脚本如下:

脚本 1 :列出当前模式下所有外键的报告表,可以将其 spool 到某个文件中

SELECT RPAD(child.TABLE_NAME,25,' ') Child_Tablename,

RPAD(cp.COLUMN_NAME,17,' ') Referring_Column,

RPAD(parent.TABLE_NAME,25,' ') Parent_Tablename,

RPAD(pc.COLUMN_NAME,15,' ') Referred_Column,

RPAD(child.CONSTRAINT_NAME,25,' ') Constraint_Name

FROM USER_CONSTRAINTS child,

USER_CONSTRAINTS parent,

USER_CONS_COLUMNS cp,

USER_CONS_COLUMNS pc

WHERE child.CONSTRAINT_TYPE = 'R' AND

child.R_CONSTRAINT_NAME = PARENT.CONSTRAINT_NAME AND

child.CONSTRAINT_NAME = cp.CONSTRAINT_NAME AND

parent.CONSTRAINT_NAME = pc.CONSTRAINT_NAME AND

cp.POSITION = pc.POSITION

ORDER BY child.OWNER,

child.TABLE_NAME,

child.CONSTRAINT_NAME,

cp.POSITION;

该脚本生成所在模式下的所有外键情况,包括外键名称,父项表名称,子项表名称以及引用的列名称等。在 SQL/PLUS 下运行该脚本,在运行该脚本之前,可以将输出 SPOOL 到本地某个文件中。同时要注意,如果应用系统中的外键比较多且复杂的话,这个脚本的运行时间会比较长。

[1] [2]

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

oracle 参照完整性,Oracle中用表外键来保证系统参照完整性相关推荐

  1. 删除oracle所有表外键,Oracle中查询、禁用、起用、删除表外键

    Oracle中查询.禁用.启用.删除表外键 1.查询所有表的外键: select table_name, constraint_name from user_constraints where con ...

  2. ORA-02292_主表在有子表外键约束的情况,如何快速批量删除和插入数据?

    ​ [引言] 最近接手一小活,需求要将一张表中的数据进行全部更新,因主表有外键关联,无法删除本表中数据,即删除有外键的表的数据时,oracle会提示:ORA-02292:integrity const ...

  3. mysql支持UUID做外键_多表外键下将普通的id主键更新为uuid主键

    多表外键下将普通的id主键更新为uuid主键 2019-05-20 02:45:37 来源: 晴天小雨 0 摘要:在多表外键影响和保证数据不删除的前提下,借助Flask-sqlalchemy插件及SQ ...

  4. 3.7 SE11创建自建表-外键

    3.7 SE11创建自建表-外键 命名规则:<Z><模块代码><T><3位流水号> 举例说明:ZWMT001 自建表外键说明: 如果一个透明表的某个字段 ...

  5. mysql建表 外键_mysql建表外键怎么设

    mysql建表外键怎么设 mysql建表时设置外键的方法:在"CREATE TABLE"语句中,通过"[CONSTRAINT ] FOREIGN KEY 字段名 [,字段 ...

  6. sql server 删表外键约束报错

    创建两个表TblTestA,TblTestB,删掉TblTestA create table dbo.TblTestA(Id bigint primary key identity(1, 1),nam ...

  7. oracle_sqlserver和mysql获取表外键的方法_mysql、sqlserver、oracle三种数据库维护索引、外键、字段语法总结...

    mysql.sqlserver.oracle三种数据库维护索引.外键.字段语法总结 1.     MYSQL数据库 1)    创建索引 CREATE INDEX index_name ON tabl ...

  8. oracle sql建表外键约束,Oracle外键约束修改行为(一)

    Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在.而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作. 在SQL92标准中定义了几种外键改变后,如何处理子表 ...

  9. Oracle中查询、禁用、启用、删除表外键

    1.查询所有表的外键 select table_name, constraint_name from user_constraints where constraint_type = 'R'; 2.禁 ...

最新文章

  1. 分析JDK源码 | Java Object
  2. Microsoft Visual Studio 2005 简体中文专业版(DVD)下载地址
  3. Playmaker全面实践教程之playMaker编辑器
  4. Windows 8 :妥协的产物
  5. 这个NLP工具,玩得根本停不下来
  6. win10无限重启_win10系统安装无限循环如何解决_win10教程
  7. python 计算每日累计_5分钟学会用Python可视化数据分析美股
  8. 用了 HTTPS 就一定安全吗?
  9. Windows 安装JDK
  10. 艾伟:微软是在向谁“献刀”
  11. linux shell读取文件,shell脚本中读取文件的方法
  12. Action Extension
  13. itol绘制高颜值的进化树
  14. 古琴怎么学,初学者应该这么练(一)
  15. 英特尔400系列服务器芯片组,Intel 400晶片组家族、对应Z490主机板型号曝光,搭配10代Comet Lake-S处理器必备 – 穷极领域...
  16. 互联网小现象:BAT疯狂投资,网易为何单打独斗?
  17. sqrt()函数详解
  18. tracker服务器
  19. 三星笔记本-星曜系列上手体验:简约时尚、轻薄便携
  20. BugkuCTF web11_网站被黑 writeup

热门文章

  1. 【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能
  2. ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL
  3. Orleans稍微复杂的例子—互动
  4. 在ASP.NET Core 2.0中使用CookieAuthentication
  5. .NET开源MSSQL、Redis监控产品Opserver之Redis配置
  6. 如何使 WebAPI 自动生成漂亮又实用在线API文档
  7. 计算机应用基础答案解析,计算机应用基础答案
  8. [转]nginx反向代理网站(网易、百度之类的)
  9. 【VB测绘程序设计】第一章 VB测绘程序设计概述
  10. 从C#开始的面向对象编程经典自学教程