精华内容
下载资源
问答
  • 正在看的ORACLE教程是:Oracle系统表外键的更名。 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在修改父后会对子加一个全表锁: 1)如果更新了父的主键(倘若遵循关系数据库的原则,即主键应当是不可变的,这种情况就很少见),由于外键上没有索引,所以子会被锁住。 2) ...
    根据我的经验,导致死锁的头号原因是外键未加索引(第二号原因是表上的位图索引遭到并发更新)。在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁:
    1)如果更新了父表的主键(倘若遵循关系数据库的原则,即主键应当是不可变的,这种情况就很少见),由于外键上没有索引,所以子表会被锁住。
    2) 如果删除了父表中的一行,整个子表也会被锁住(由于外键上没有索引)。
     
    除了全表锁外,在以下情况下,未加索引的外键也可能带来问题:
    1) 如果有ON DELETE CASCADE,而且没有对子表加索引:例如,EMP是DEPT的子表,DELETE DEPTNO = 10应该CASCADE(级联)至EMP。如果EMP中的DEPTNO没有索引,那么删除DEPT表中的每一行时都会对EMP做一个全表扫描。这个全表扫 描可能是不必要的,而且如果从父表删除多行,父表中每删除一行就要扫描一次子表。
    2) 从父表查询子表:再次考虑EMP/DEPT例子。利用DEPTNO查询EMP表是相当常见的。如果频繁地运行以下查询(例如,生成一个报告),你会发现没有索引会使查询速度变慢:
    ? select * from dept, emp
    ? where emp.deptno = dept.deptno and dept.deptno = :X;
     
    那么,什么时候不需要对外键加索引呢?答案是,一般来说,当满足以下条件时不需要加索引:
    1) 没有从父表删除行。
    2) 没有更新父表的惟一键/主键值(当心工具有时会无意地更新主键!)。
    3) 没有从父表联结子表(如DEPT联结到EMP)。
     
    转载:http://blog.itpub.net/24104518/viewspace-716784/

    转载于:https://www.cnblogs.com/cainiao-Shun666/p/6888712.html

    展开全文
  • 仅做记录,有tableA 与tableB两张,tableA (noA)主键字段是tableB(noB)字段的外键 当修改tableA noA的时候会违背约束 解决方案一: 可以将子tableB noB字段改成任意一个存在于tableB中的值,然后修改table...

    仅做记录,有tableAtableB两张表,tableA (noA)主键字段是tableB(noB)字段的外键

    当修改tableA  noA的时候会违背约束

    解决方案一: 

            可以将子表tableB noB字段改成任意一个存在于tableB表中的值,然后修改tableA 中noA 为新值 然后再将tableB的noB修改成新值;

    解决方案二:

     解除主外键约束,然后进行修改,最后启用主外键约束  具体步骤如下:

    --(1)解除约束
    alter table tableB  disable constraint   FK_tableB_noB(约束名字);
    
    --(2)操作
    update tableA set noA = 'new Value' where noA = 'old Value';
    update tableB set noB = 'new Value' where noB = 'old Value';
    
    --(3)启用约束
    alter table tableB enable constraint FK_tableB_noB(约束名字);

             

    展开全文
  • 添加两张已存在数据的的关系外键时,报如下图所示的错误: 出现这种错误,无非是两张的关联字段的名称、类型、长度等不一致,又或者中已存在的数据不匹配造成的。 我们可以通过minus关键字查询2张表的差值...

    添加两张已存在数据的表的关系外键时,报如下图所示的错误:

    出现这种错误,无非是两张表的关联字段的名称、类型、长度等不一致,又或者表中已存在的数据不匹配造成的。

    我们可以通过minus关键字查询2张表的差值,确实存在!!!

    解决方法有两种:

    (1).删除多余的数据,保持2张表数据统一,在执行 alter table 表1 add constraint FK_XXX foreign key(字段1)  references 表2 (字段2);就不会报错了;

    (ps:这种方式在实际生产过程中不实际,生产环境数据不能随便删除的,所以这种方式不现实,不推荐)

    (2).在alter语句之后加上enable novalidate即可,即alter table 表1 add constraint FK_XXX foreign key(字段1)  references 表2 (字段2) enable novalidate;

    (ps:enable novalidate指的是允许已有记录不满足约束条件,但新增/修改的记录则必须满足约束条件)

     

    这是其他3种修饰关键词的含义:

    Enable Validate与Enable相同,检查已有记录和新增记录,确保都符合约束;

    Disable Validate禁用约束,删除约束上的索引,不允许修改任何被约束的记录;

    Disable Novalidate与Disable相同,禁用约束,删除约束上的索引,且允许修改被约束的记录。

     

    参考博客链接

     

    转载于:https://www.cnblogs.com/4AMLJW/p/asfdfewf.html

    展开全文
  • 呵呵,现将过程共享一下问题:在oracle里建外键的时候可以指定随主的主键记录删除而删除或为NULL或不做任何操作这样三种选择,因此我们可以很容易实现比sqlserver更为灵活的级联删除功能,但在sqlserver里还有一...
  • 最近,项目需要把开发环境的数据与生产环境数据的主键保持一致,这就需要修改主键,但很多主键都是作为子外键存在的,所以需要进行一些处理,以下是当时的实际操作步骤: 1、根据其他信息把开发数据与生产数据的...
  • 举例:修改te_rygj_menu这张表的主键menu_id时,te_rygj_usermenu中的menu_id也跟着修改。利用触发器trigger实现: create or replace trigger id_trigger after update of menu_id on te_rygj_menu ...
  • 中的外键就是对于该属性所对应的域的限制,对于插入到中的该属性的数据进行约束。并且该外键映射于所对应的另一张的能唯一标识每一条数据的主键,根据参照完整性规则,外键可以取空值或者取对应主键的数值。...
  • Oracle系统中表外键的更名(转)[@more@]Oracle外键是保证系统参照完整性的手段,而参照完整性是指分布在两个中的列所满足的具有主从性质的约束关系。外键涉及到两个,其中一个称之为父项,另一个称之为...
  • Oracle :主键外键删除与失效 使主键失效:alter table tableName disable primary key; 使主键恢复:alter table tableName enable primary key; 删除主键:alter table tableName drop primary key; 使外键失效:...
  • Oracle外键用来限制子中参考的字段的值,必须在主中存在。而且在主的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。在SQL92标准中定义了几种外键改变后,如何处理子记录的动作,...
  • oracle 外键修改

    2019-08-20 22:10:03
    场景: 有时候我们经常需要修改一下数据,但是这个字段关联着外键,这个时候我们需要首先清楚外键所在的的数值,然后再修改这个字段值。这时候我们就需要外键查询了。 1.查询外键所在 ORA-02292: integrity ...
  • oracle数据库中的六大约束中,外键约束的写法最多,也最不好理解,所以作者在下面的内容中整理了oracle中外键约束的使用方法 一.外键约束存在的意义 在一个软件项目中,会产生大量的用户数据,平台数据,这些数据...
  • Oracle系统中表外键的更名(石骁騑 2001年09月06日 10:16)Oracle外键是保证系统参照完整性的手段,而参照完整性是指分布在两个中的列所满足的具有主从性质的约束关系。外键涉及到两个,其中一个称之为父...
  • Oracle系统中表外键的更名(转)[@more@]  Oracle外键是保证系统参照完整性的手段,而参照完整性是指分布在两个中的列所满足的具有主从性质的约束关系。外键涉及到两个,其中一个称之为父项,另一个称之...
  • ORACLE数据库中,定义外键约束时,ORACLE是不会自动创建对应索引的,必须手动在外键约束相关的列上创建索引。那么外键字段上是否有必要创建索引呢?如果有必要的话,巡检时,如何找出外键字段上没有创建索引的相关...
  • create table a(aid char(2) primary key,name char(10));create table b(bid char(2) primary key,name char(10),aid char(2));alter table badd constraint a_b foreign key(aid) references a(aid)deferrable;...
  • 小议Oracle外键约束修改行为(五)Oracle外键用来限制子中参考的字段的值,必须在主中存在。而且在主的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。前面几篇文章介绍了Oracle所支持...
  • 主键与外键 1. 主键(Primary Key) (1) 候选键 (Candidate Key) Candidate Key:A candidate key is a column (attribute) or columns that could uniquely identify a row (tuple) in the table (relation) 候选键...
  • 已创建。 SQL > alter table userinfo_f4 2 add constraint fk_typeid_alter foreign key ( typeid_new ) references typeinfo ( typeid ); 已更改。
  • Oracle中检查外键是否有索引的SQL脚本分享,本文给出了两个版本的脚本源码,一个查询所有用户,一个查询单用户COLUMN COLUMNS format a30 word_wrappedCOLUMN tablename format a15 word_wrappedCOLUMN constraint_name...
  • 要修改先删除外键和和主键,通过创建临时的字段存数据 (目的是为了保留客户原来的数据),最后重新建立主键和外键 1、删除主外键关系    alter table 表名 drop constraint 关系名;   2、执行以下语句报"要修改...
  • oracle外键约束的添加、修改、删除
  • 1、外键约束:外键(foreign key)是用来建立和加强两个数据之间的连接的一列或多列。外键约束是唯一涉及两个关系的约束。 注:先创建的叫主或附表,后创建的且和主有关系的叫从或子 2、外键约束的...
  • Oracle创建外键约束

    2019-10-23 13:50:21
    1. 创建时创建外键 CREATE TABLE T1 (employee_id NUMBER(4), last_name VARCHAR2(10), job_id VARCHAR2(9), salary NUMBER(7,2), department_id CONSTRAINT fk_dep...
  • Oracle外键用来限制子中参考的字段的值,必须在主中存在。而且在主的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。在SQL92标准中定义了几种外键改变后,如何处理子记录的动作,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,512
精华内容 17,004
关键字:

oracle改表外键