文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发OracleOracle数据库中的表外键的更名细则
精品推荐
特别推荐
·常用数据库比较
·ODBC API常用函数诠释
·提高ORACLE数据库的查询统计速度
·细化解析:Oracle使用的hints调整机制
·解析Oracle/Oracle Forms 的多用途代码
·从Oracle的FORM中调用REPORT的实用技巧
·Oracle SQL精妙SQL语句讲解
·ORACLE学习笔记--性能优化四
·ORACLE常用傻瓜问题1000问
·ORACLE常见错误代码的分析与解决之二
·深刻理解Oracle数据库的启动和关闭
·监控Oracle数据库的常用shell脚本
·Oracle在Solaris下的性能与调整简介
·通俗解说ORACLE
·数据库安全性策略
热点TOP10
·详细介绍ORACLE sqlplus命令
·ORACLE常用傻瓜问题1000问
·我的oracle笔记四(DBA管理)
·Oracle SQL精妙SQL语句讲解
·Oracle Tuning (Oracle 性能调整)的一些总结
·我的oracle笔记一(sql语句方面)
·程序员如何掌握计算机英语
·用正则表达式函数验证身份证号码合法性
·oracle数据库 exp/imp命令详解
·性能分析工具的使用
·ORACLE UPDATE 语句语法与性能分析看法
·在Solaris 10 X86上安装Oracle 10g RAC详解 (1)
·ORA-01092: ORACLE 例程终止。强行断开连接
·VMware下RedHat安装Oracle 9i RAC全攻略
·监控Oracle数据库的常用shell脚本
·手工创建oracle数据库
·常用数据库比较
·PL/Sql循序渐进全面学习教程
·在Solaris 10 X86上安装Oracle 10g RAC详解 (2)
·ORACLE学习笔记--性能优化一

Oracle数据库中的表外键的更名细则

日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]


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 到本地某个文件中。同时要注意,如果应用系统中的外键比较多且复杂的话,这个脚本的运行时间会比较长。

二、生成删除系统自动命名的外键脚本

在 SQL/PLUS 下,运行下面的脚本来生成删除系统自动命名(也就是外键名称以 SYS 为前缀)的所有外键,和生成外键报告一样,将生成脚本 spool 到某个文件中。

脚本 2 :删除系统自动生成的外键约束条件

SELECT 'ALTER TABLE '  TABLE_NAME ' ' 

'DROP CONSTRAINT '  CONSTRAINT_NAME  ' ;' 

FROM USER_CONSTRAINTS 

WHERE CONSTRAINT_NAME LIKE 'SYS%' AND 

CONSTRAINT_TYPE = 'R';

运行该脚本,系统生成如下所示的删除外键脚本:

ALTER TABLE DJ_NSRXX DROP CONSTRAINT SYS_C000231;

三、生成重新创建删除的外键脚本

在 SQL/PLUS 下,运行下面的脚本来生成重新创建删除的外键脚本:

脚本 3 :重新创建外键

SELECT 'ALTER TABLE '  child.TABLE_NAME' '  

'ADD CONSTRAINT '  ' 外键名称 ' ' ' 

'FOREIGN KEY '  '(' cp.COLUMN_NAME  ')'  

' ' 'REFERENCES '  parent.TABLE_NAME ' ' 

'(' pc.COLUMN_NAME  ')' child.DELETE_RULE  ' ;' 

FROM USER_CONSTRAINTS child, 

USER_CONSTRAINTS parent, 

USER_CONS_COLUMNS cp, 

USER_CONS_COLUMNS pc 

WHERE child.CONSTRAINT_TYPE = 'R' AND 

child.R_OWNER = PARENT.OWNER 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 AND 

child.CONSTRAINT_NAME LIKE 'SYS%' 

ORDER BY child.OWNER, 

child.TABLE_NAME, 

child.CONSTRAINT_NAME, 

cp.POSITION;

运行该脚本,系统生成如下所示的创建外键脚本:

ALTER TABLE DJ_NSRXX ADD CONSTRAINT 外键名称
 FOREIGN KEY (RYDM) REFERENCES DM_GY_SWRY(RYDM);

将上面的外键名称以上面介绍的规范命名规则命名的外键名称代替,就是:

ALTER TABLE DJ_NSRXX ADD CONSTRAINT FK_DJ_NSRXX_DM_GY_SWRY 
FOREIGN KEY (RYDM) REFERENCES DM_GY_SWRY(RYDM);

四、外键更名

生成上面的两个脚本后,首先运行第二步中删除系统自动生成外键的脚本,将系统中命名不规范的外键删除,然后运行第三步中生成的创建外键的脚本,重新创建这些删除的外键,也就实现了对不规范外键的更名。

五、系统检查

操作完成后,重新执行步骤 1 ,再生成一个应用系统的外键报告单,作对比检查。如果正确无误,则更名成功,否则查找原因。

(出处:清风网络学院






上一篇:有关Oracle数据库中的封锁机制详解

下一篇:关于Oracle数据库中快照的使用方法

Oracle数据库中的表外键的更名细则 相关文章:
·详细介绍ORACLE sqlplus命令
·ORACLE常用傻瓜问题1000问
·我的oracle笔记四(DBA管理)
·SQL2000 数据库安装说明
·Oracle SQL精妙SQL语句讲解
·SQL数据库完全使用手册
·Oracle Tuning (Oracle 性能调整)的一些总结
·Visual C++ ADO数据库编程入门
·我的oracle笔记一(sql语句方面)
·目前最好的JSP分页技术(考虑到数据库移植,并修正过效率)
Oracle数据库中的表外键的更名细则 相关软件:
·ACCESS数据库教程 北京大学的ACCESS教程
·Oracle v8.1.7
·爆出网站数据库路径
·逐步精通数据库 sql server 视频教程
·SQL/MYSQL/数据库教程专栏
·ORACLE内部培训视频教学 RM 22讲
·Active Server Pages & Web 数据库(PDG)
·东南大学SQL数据库基础视频教学全42讲 CSF 详见查看
·QQ IP数据库 Build 0410
·数据库与WWW

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot