当前位置:  数据库>oracle

Oracle级联操作

    来源: 互联网  发布时间:2017-05-19

    本文导语: Oracle的级联操作是为了处理,在删除主表数据时,从表外键数据该怎么处理,有如下三种情况: 1、SET NULL: 此关键字用于表示当删除主表中被引用列的数据时,将子表中相应引用列的值设置为NULL值。这种情况要求子表中的引用...

Oracle的级联操作是为了处理,在删除主表数据时,从表外键数据该怎么处理,有如下三种情况:

1、SET NULL:

此关键字用于表示当删除主表中被引用列的数据时,将子表中相应引用列的值设置为NULL值。这种情况要求子表中的引用列支持NULL值。

2、CASCADE:

此关键字用于表示当删除主表中被引用列的数据时,级联删除子表中相应的数据行。

3、NO ACTION:

约束后面省略ON DELETE的情况,此关键字用于表示当删除主表中被引用列的数据时,如果子表的引用列中包含该值,则禁止该操作执行。

下面通过例子展示:

第一种情况:

--创建主表

SQL> create table father(

2 f_id number(10) primary key,

3 f_name varchar2(20)

4 );

表已创建。

--创建从表

SQL> create table child(
  2  c_id number(10) primary key,
  3  f_id number(10),
  4  c_name varchar2(20),
  5  constraint ch_fa foreign key (f_id) references father(f_id)
  6  on delete set null
  7  );
 
--插入数据

SQL> insert into father values (1,'cupid');

已创建 1 行。

SQL> insert into father values (2,'dorria');

已创建 1 行。

SQL> insert into child values (1,1,'jack');

已创建 1 行。

SQL> insert into child values (2,2,'rose');

已创建 1 行。

commit;

提交完成。

SQL> delete from father where f_id=1;

已删除 1 行。

SQL> commit;

提交完成。

SQL> select * from father;

      F_ID F_NAME
---------- -------------------------------
        2 dorria
SQL> select * from child;

      C_ID      F_ID C_NAME
---------- ---------- --------------------
        1            jack
        2          2 rose

第二种情况:

--创建主表

SQL> create table father_1(

2 f_id number(10) primary key,

3 f_name varchar2(20)

4 );

表已创建。

--创建从表

SQL> create table child_1(
  2  c_id number(10) primary key,
  3  f_id number(10),
  4  c_name varchar2(20),
  5  constraint ch_fa_1 foreign key (f_id) references father(f_id)
  6  on delete cascade
  7  );
 
--插入数据

SQL> insert into father_1 values (1,'cupid');

已创建 1 行。

SQL> insert into father_1 values (2,'dorria');

已创建 1 行。

SQL> insert into child_1 values (1,1,'jack');

已创建 1 行。

SQL> insert into child_1 values (2,2,'rose');

已创建 1 行。

commit;

提交完成。

SQL> delete from father where f_id=1;

已删除 1 行。

SQL> commit;

提交完成。

SQL> select * from father;

      F_ID F_NAME
---------- -------------------------------
        2 dorria
SQL> select * from child_1;

      C_ID      F_ID C_NAME
---------- ---------- --------------------
        2          2 rose


第三种情况:

--创建主表

SQL> create table father_2(

2 f_id number(10) primary key,

3 f_name varchar2(20)

4 );

表已创建。

--创建从表

SQL> create table child_2(
  2  c_id number(10) primary key,
  3  f_id number(10),
  4  c_name varchar2(20),
  5  constraint ch_fa_2 foreign key (f_id) references father(f_id)
  6  );
 
--插入数据

SQL> insert into father_2 values (1,'cupid');

已创建 1 行。

SQL> insert into father_2 values (2,'dorria');

已创建 1 行。

SQL> insert into child_2 values (1,1,'jack');

已创建 1 行。

SQL> insert into child_2 values (2,2,'rose');

已创建 1 行。

commit;

提交完成。

SQL> delete from father_2 where f_id=1;
delete from father_2 where f_id=1
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (SCOTT.CH_FA_2) - 已找到子记录


    
 
 

您可能感兴趣的文章:

  • ORACLE日期相关操作
  • Linux下如何用C语言操作Oracle数据库相关的图书推荐
  • Oracle终于涉入支持Linux操作系统了
  • Linux平台下Oracle的操作
  • linux c 怎样利用pro*c/c++操作 win2000 下 oracle 谢谢
  • Window客户端通过ADO是否能够连接和操作Unix平台下的Oracle数据库?
  • Oracle将字符编码从GBK转到UTF8,如何操作比较稳妥?
  • 如何设定linux red hat 9的oracle9,让window的电脑可以操作数据库
  • linux oracle数据库删除操作指南
  • WEB前端 iis7站长之家
  • Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁
  • oracle的plsql里有没有位操作的功能
  • fedora core5 (FC5) 下面不能装 Oracle 10g 么? (检查操作系统就通不过啊,晕)
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • 怎样在c语言的代码里内嵌的操作oracle数据库,各位大虾谢谢了
  • 一个关于JAVA操作oracle数据库时UPDATE权限的问题
  • Oracle中操作分页
  • Oracle 数据库操作技巧集
  • secureCRT远程连接服务器操作oracle数据库出现的问题
  • 请教各位:JAVA操作ORACLE的问题 急!!!
  • 学习登录oracle数据库时常用的操作命令
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE数据库常用字段数据类型介绍
  • Linux系统下Oracle的启动与Oracle监听的启动
  • Oracle 12c的九大最新技术特性介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • ORACLE中DBMS_RANDOM随机数生成包
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,