Oracle系统表外键的更名
正在看的ORACLE教程是:Oracle系统表外键的更名。
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脚本如下:
该脚本生成所在模式下的所有外键情况,包括外键名称,父项表名称,子项表名称以及引用的列名称等。在SQL/PLUS下运行该脚本,在运行该脚本之前,可以将输出SPOOL到本地某个文件中。同时要注意,如果应用系统中的外键比较多且复杂的话,这个脚本的运行时间会比较长。
二、生成删除系统自动命名的外键脚本
在SQL/PLUS下,运行下面的脚本来生成删除系统自动命名(也就是外键名称以SYS为前缀)的所有外键,和生成外键报告一样,将生成脚本spool到某个文件中。
运行该脚本,系统生成如下所示的删除外键脚本:
三、生成重新创建删除的外键脚本
在SQL/PLUS下,运行下面的脚本来生成重新创建删除的外键脚本:
运行该脚本,系统生成如下所示的创建外键脚本:
1 ALTER TABLE DJ_NSRXX ADD CONSTRAINT 外键名称 FOREIGN KEY (RYDM) REFERENCES DM_GY_SWRY(RYDM);
将上面的外键名称以上面介绍的规范命名规则命名的外键名称代替,就是
四、外键更名
生成上面的两个脚本后,首先运行第二步中删除系统自动生成外键的脚本,将系统中命名不规范的外键删除,然后运行第三步中生成的创建外键的脚本,重新创建这些删除的外键,也就实现了对不规范外键的更名。
五、系统检查
操作完成后,重新执行步骤1,再生成一个应用系统的外键报告单,作对比检查。如果正确无误,则更名成功,否则查找原因。
Oracle系统表外键的更名的更多相关文章
- 通过在Oracle子表外键上建立索引提高性能
根据我的经验,导致死锁的头号原因是外键未加索引(第二号原因是表上的位图索引遭到并发更新).在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁: 1)如果更新了父表的主键(倘若遵循关系数据库 ...
- oracle 创建表 外键约束
create table usertable( id int primary key, username ) not null, birthday date, sex ), address ) ); ...
- oracle系统表查询
oracle查询用户下的所有表 select * from all_tab_comments -- 查询所有用户的表,视图等select * from user_tab_comments -- 查询本 ...
- ORACLE中关于外键缺少索引的探讨和总结
在ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引.那么外键字段上是否有必要创建索引呢?如果有必要的话,巡检时,如何找出外键字段上没有创 ...
- ORACLE系统表大全
下面全面是对Oracle系统表的一些介绍: 数据字典dict总是属于Oracle用户sys的. 1.用户: select username from dba_users; 改口令 alter user ...
- (转)ORACLE中关于外键缺少索引的探讨和总结
在ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引.那么外键字段上是否有必要创建索引呢?如果有必要的话,巡检时,如何找出外键字段上没有创 ...
- sql查询指定表外键约束
//////////////////查询指定表外键约束select a.name as 约束名, object_name(b.parent_object_id) as 外键表, d.name as 外 ...
- oracle系统表的查询
oracle查询用户下的所有表 select * from all_tab_comments -- 查询所有用户的表,视图等select * from user_tab_comments -- 查 ...
- oracle 建表 主键自增序列/////
oracle 建表 主键自增序列 (2011-10-12 11:59:22) 转载▼ 标签: 杂谈 分类: oracle SQL> create table sms_activity( 2 ...
随机推荐
- 斯坦福大学公开课机器学习:Neural network-model representation(神经网络模型及神经单元的理解)
神经网络是在模仿大脑中的神经元或者神经网络时发明的.因此,要解释如何表示模型假设,我们先来看单个神经元在大脑中是什么样的.如下图,我们的大脑中充满了神经元,神经元是大脑中的细胞,其中有两点值得我们注意 ...
- mock.js的使用
安装 npm install mockjs 使用 const Mock = require("mockjs") //格式"属性名|min-max": " ...
- 系统自带的日志管理工具-rsyslogd
系统自带的日志管理工具-rsyslogd 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志管理简介 1.什么是日志 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以 ...
- Linux记录-TCP状态以及(TIME_WAIT/CLOSE_WAIT)分析(转载)
1.TCP握手定理 2.TCP状态 l CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”. l LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接. ...
- jsp四大对象
发送参数: <a href="deal.jsp?id=1&user=用户&pwd=">处理页</a> 接收参数: <% String ...
- Nginx管理脚本
#!/bin/bash # chkconfig: # description: Start/Stop Nginx server path=/application/nginx/sbin pid=/ap ...
- ueditor 百度编辑器,自定义右键菜单
如图:有2种自定义方法,一种是改源码,一种是初始化 初始化,如下代码: var ue = UE.getEditor('XXXid',{ // contextMenu:[ {label:'', cmdN ...
- 13. Spring Boot 拦截器
1.thymeleaf 页面修改后可能不会实时反馈到Web,做2步骤: 1)禁用掉tymleaf 缓存: spring.thymeleaf.cache=false 2)IDE编辑器:Ctrl + F ...
- dos 设置 Windows 网络命令
dos 设置Windows 命令: netsh interface ip set address name="本地连接" source=static addr=172.16.12. ...
- POJ3635 Full Tank?【Dijkstra+DP】
题意: n个城市之间有m条双向路.每条路要耗费一定的油量.每个城市的油价是固定并且已经给出的.有q个询问,表示从城市s走到e,油箱的容量为c,求最便宜的方案. 思路: 用Dijkstra+Heap即可 ...