知识大全 Oracle外键与其主键的实际应用方案

Posted 时间

篇首语:三人行必有我师焉;择其善者而从之,其不善者而改之。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle外键与其主键的实际应用方案相关的知识,希望对你有一定的参考价值。

Oracle外键与其主键的实际应用方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  以下的文章主要是对Oracle主键与Oracle外键的实际应用方案的介绍 此篇文章是我很然偶在一网站上发现的 如果你对Oracle主键与Oracle外键的实际应用很感兴趣的话 以下的文章就会给你提供更详细的相关方面的知识

   CREATE TABLE SCOTT MID_A_TAB

   ( A VARCHAR ( BYTE)

   B VARCHAR ( BYTE)

   DETPNO VARCHAR ( BYTE)

   )TABLESPACE USERS ;

   CREATE TABLE SCOTT MID_B_TAB

   ( A VARCHAR ( BYTE)

   B VARCHAR ( BYTE)

   DEPTNO VARCHAR ( BYTE)

   )TABLESPACE USERS ;

  给MID_A_TAB表添加主键

   alter table mid_a_tab add constraint a_pk primary key (detpno);

  给MID_B_TAB表添加Oracle主键

   alter table mid_b_tab add constraint b_pk primary key(a);

  给子表MID_B_TAB添加Oracle外键 并且引用主表MID_A_TAB的DETPNO列 并通过on delete cascade指定引用行为是级联删除

   alter table mid_b_tab add constraint b_fk foreign key

  (deptno) references mid_a_tab (detpno) on delete cascade;

  向这样就创建了好子表和Oracle主表

  向主表添加数据记录

   SQL> insert into mid_a_tab(a b detpno) values( );

  已创建 行

  已用时间: : :

  向子表添加数据

   SQL> insert into mid_b_tab(a b deptno) values( );

   insert into mid_b_tab values( )

   *

  第 行出现错误:

  ORA : 违反唯一约束条件 (SCOTT B_PK)

  已用时间: : :

  可见上面的异常信息 那时因为子表插入的deptno的值是 然而此时我们主表中

  detpno列只有一条记录那就是 所以当子表插入数据时 在父表中不能够找到该引用

  列的记录 所以出现异常

  但我们可以这样对子表的数据的进行插入(即 在子表的deptno列插入null 因为我们在建表的时候

  并没有对该列进行not null的约束限制)

   SQL> insert into mid_b_tab(a b deptno) values( null);

  已创建 行

  已用时间: : :

  现在如果我们把子表mid_b_tab中deptno列加上not null约束

   SQL> alter table mid_b_tab modify deptno not null;

   alter table mid_b_tab modify deptno not null

   *

  第 行出现错误:

  ORA : 无法启用 (SCOTT ) 找到空值

  已用时间: : :

  上面又出现异常 这是因为现在mid_b_tab表中有了一条记录 就是我们先前添加的

  那条记录

   null

  现在我们要把该表的deptno列进行not null约束限制 所以Oracle不让我们这样干

  那我们就只有把该表给delete或truncate掉 然后在修改deptno列为非空

   SQL> delete from mid_b_tab;

  已删除 行

  已用时间: : :

  再次修改子表mid_b_tab表的deptno列为非空

   SQL> alter table mid_b_tab modify deptno not null;

  表已更改

  已用时间: : :

  修改成功!

  我们再次插入数据

   insert into mid_b_tab(a b deptno) values( null);

  试试

   SQL> insert into mid_b_tab(a b deptno) values( null);

   insert into mid_b_tab(a b deptno) values( null)

   *

  第 行出现错误:

  ORA : 无法将 NULL 插入 ( SCOTT MID_B_TAB DEPTNO )

  已用时间: : :

  看见现在Oracle不让我们插入空值了

  所以我们在创建子表的Oracle外键约束时 该表的引用列必须要进行not null限制 也可以在

  该列创建unique 或primary key约束 并且引用列与被引用列的数据类型必须相同

   SQL> insert into mid_b_tab(a b deptno) values( );

  已创建 行

  已用时间: : :

  此时数据插入成功 因为此时插入的 在主表中的被引用列中已经存在了

  现在我们一系列的操作

   SQL> select * from mid_b_tab ;

   A B DE

  

  

  已用时间: : :

   SQL> select * from mid_a_tab;

   A B DE

  

  

  已用时间: : :

   SQL> delete from mid_a_tab;

  已删除 行

cha138/Article/program/Oracle/201311/18331

相关参考

知识大全 Oracle外键的相关约束中级联删除的方案

Oracle外键的相关约束中级联删除的方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQL

知识大全 oracle数据库中sql基础

  一关系数据库的一些概念    主键的值一般不可以改变    外键指向另一个表或本表的主键或唯一键的字段外键的值一定要和某一主键相同或者为空    数据库对像表视图序列索引同义词程序(进程函数sql

知识大全 Oracle中非默认方式创建外键的使用

Oracle中非默认方式创建外键的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  创建外键约

知识大全 oracle中如何判断本表有多少张表对其有外键关联

  在oracle中如何判断本表有多少张表对其有外键关联?我们主要分为两步  第一步  //查询表的主键约束名  select*fromuser_constraintsewhereetable_nam

知识大全 gridview获取主键的值

  在GridView_RowCommand中获取主键的值  protectedvoidGridView_RowCommand(objectsenderGridViewCommandEventArgs

知识大全 hibernate中自定义主键生成器

  Hibernate(目前使用的版本是)中提供了多种生成主键的方式  然而当前的这么多种生成方式未必能满足我们的要求  比如increment可以在一个hibernate实例的应用上很方便的时候但是

知识大全 hibernate中自定义主键生成器[1]

  Hibernate(目前使用的版本是)中提供了多种生成主键的方式  然而当前的这么多种生成方式未必能满足我们的要求  比如increment可以在一个hibernate实例的应用上很方便的时候但是

知识大全 外键约束和参绍约束的实例脚本

  外键约束和参绍约束的实例脚本    /*外键约束和参绍约束pubs数据库的CarIfo表创建外键约束参绍CarFactory表的主键ID*/USEPubsGO/*不显示行数*/SETNOCOUNT

知识大全 快速掌握外键约束和参绍约束

  键约束和参绍约束的实例脚本/*外键约束和参绍约束pubs数据库的CarIfo表创建外键约束参绍CarFactory表的主键ID  外键约束和参绍约束的实例脚本cha138/Article

知识大全 如何在Oracle中用非默认方式创建外键

如何在Oracle中用非默认方式创建外键  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  创建外键