`
wengsibo
  • 浏览: 80039 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

oracle级联删除

 
阅读更多

oracle中使用on delete cascade和on delete set null来建立外键
其面我们介绍了创建外键约束时如果使用oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在oracle9i中给了我们更多灵活的选择,我们可是使用on delete cascade和 on delete set null关键字来决定删除被参照数据时是否要将参照这个数据的那些数据一并删除,还是将那些参照这条数据的数据的对应值赋空。
例如下面这两个表中分别存的时员工的基本信息和公司的部门信息。我们为
create table dept
(deptno number(10) not null,
deptname varchar2(30) not null,
constraint pk_dept primary key(deptno));

create table emp
( empno number(10) not null,
fname varchar2(20) ,
lname varchar2(20) ,
dept number(10) ,
constraint pk_emp primary key(empno));
然后我们现在分别使用这两个关键字来增加外键试一下,首先我们来试一下on delete cascade
alter table emp
add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;
先增加外键。然后插入数据。
insert into dept values(1,’销售部’);
insert into dept values(2,’财务部’);
insert into emp values (2,’Mary’,'Song’,1);
insert into emp values (3,’Linda’,'Liu’,2);
insert into emp values (4,’Linlin’,'Zhang’,1);
然后现在我要删除销售部,会有什么后果呢?
delete from dept where deptno = 1;
我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很容易理解on delete cascade了。
接下来我们再来看on delete set null,顾名思义了,这种方式建立的外键约束,当被参照的数据被删除是,参照该数据的那些数据的对应值将会变为空值,下面我们还是通过试验来证明on delete set null作用:
首先恢复刚才的那几条数据,然后更改约束:
alter table emp
add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete set null;
然后我们在执行删除操作:
delete from dept where deptno = 1;
你也会发现除了dept中的销售部被删除以外,emp中参照这条数据的两条数据的dept的值被自动赋空了,这就是on delete set null的作用了。
使用on delete set null有一点需要注意的是,被参参照其他表的那一列必须能够被赋空,不能有not null约束,对于上面的例子来说是emp中dept列一定不能有not null约束,如果已经定义了not null约束,又使用了on delete set null来删除被参照的数据时,将会发生:ORA-01407: 无法更新 (”DD”.”EMP”.”DEPT”) 为 NULL的错误。
总的来讲on delete cascade和on delete set null的作用是用来处理级联删除问题的,如果你需要删除的数据被其他数据所参照,那么你应该决定到底希望oracle怎么处理那些参照这些即将要删除数据的数据的,你可以有三种方式:
禁止删除。这也是oracle默认的
将那些参照本值的数据的对应列赋空,这个需要使用on delete set null关键字
将那些参照本值的数据一并删除,这个需要使用on delete cascade关键字

分享到:
评论

相关推荐

    解析Oracle中多表级联删除的方法

    方法一:创建约束时设定级联删除(但一般由于各种原因或出于各种考虑在创建数据库时没有设定级联删除)SQL语句: 代码如下:CREATE TABLE “U_WEN_BOOK”.”FARTAB” (“FAR_ID” NUMBER(10) NOT NULL,“FAR_NAME” ...

    Oracle数据库中的级联查询、级联删除、级联更新操作教程

    在ORACLE 数据库中有一种方法可以实现级联查询 select * //要查询的字段 from table //具有子接点ID与父接点ID的表 start with selfid=id //给定一个startid(字段名为子接点ID,及开始的ID号) connect by prior ...

    oracle表空间替换转移级联删除脚本生成工具

    1.可以扫描oracle导出的dmp文件中的表空间信息,然后替换为指定的表空间名,要以将多个表空间名转换为一个表空间名 2.可以进行常规的一些导入导出新建数据库操作 3.可以生成包含子表的按条件删除的脚本,维护数据时...

    21天学通Oracle

    6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 ...

    oracle_dynamic_sql.rar_Dynamic SQL ORAC_oracle_oracle dynam_orac

    介绍了在oracle里,如何使用动态SQL,如何进行级联删除,文件中举例阐述了实现方法

    数据库oracle 学习笔记重点总结

    数据库,oracle ,强制删除,系列,事物控制,级联删除,sql,sqlpuls

    非常全的oracle文档

    3.2. Oracle的卸载、删除 9 四、 Oracle体系结构 10 4.1. 体系结构 10 4.2. 会话 11 4.3. 内存结构 11 4.4. Oracle 实例进程结构 12 4.5. Oracle 物理组件 13 4.6. Oracle 逻辑组件 13 4.7. 模式 15 4.8. 数据文件...

    zhangsanlzh#Solutions#oracle常用操作命令1

    1、创建表空间 2、创建用户并授权 3、导出数据库到桌面 4、导入dmp文件到数据库 5、登录数据库 6、级联删除用户所有数据 7、删除表空间

    javaweb博客网站

    1.用的struts2,数据库用的Oracle11g,DAO用的DBUtils,富文本用的百度的UEditor 2.界面风格是仿照博客园的,其实就是扒下来的,所以html有点乱,将就看吧 3.数据库没设计好,外键直接引用的主键属性,所以没做级联...

    风越asp代码生成器 V3.5

    02、支持Microsoft SQL Server、Microsoft Access、Oracle、MySql、Excel、FoxPro、FoxBase、Text等数据库连接 03、支持从数据表、视图(Access为查询)中读取数据字段 04、支持通过数据表中的组合主键传递参数 05、...

    风越.net代码生成器 v3.5

    02、支持Microsoft SQL Server、Microsoft Access、Oracle、MySql、Excel、FoxPro、FoxBase、Text等数据库连接 03、支持从数据表、视图(Access为查询)中读取数据字段 04、支持通过数据表中的组合主键传递参数 05、...

    jdbc基础和参考

    delete:在删除当前对象的时候,级联删除和他相关联的对象 all: save-update+delete delete-orphan:解除关联关系时,删除和当前对象失去关联的对象 all-delete-orphan:all+delete-orphan 单向的一对多的关系,在进行...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    02、支持Microsoft SQL Server、Microsoft Access、Oracle、MySql、Excel、FoxPro、FoxBase、Text等数据库连接 03、支持从数据表、视图(Access为查询)中读取数据字段 04、支持通过数据表中的组合主键传递参数 05、...

    DBJ.jar:一个开放源代码库,用于替换本机JDBC协议,DBJ.jar可以轻松地通过某种方法连接到数据库,因此用户必须在功能中提供凭据和参数,DBJ才能处理其余部分(连接,驱动程序管理器,准备的声明,结果集等)

    DBJ.jar 一个用于替换本机...不具有连接对象的GetAll,具有/不具有连接对象的特定字段)@Overloading 更新类(尚未实施) 删除类(尚未实施) 触发器类(尚未实现) 事务的级联回滚(尚未实现)连接类(包com.dbj.con

    mysql数据库的基本操作语法

    级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加on deletecascade 或on delete set null,前者是级联删除,后者是将从表的关联列的值设置为null。 create table student( id int...

    lightjsd:'lightjsd' 是一个轻量级的 Java Web 服务器

    所有第三方许可和权利都会自动级联。 作者/ 的最大是删除或修改争议事项。 您可以善意地利用这个项目。 善意的反面包括受适用司法管辖的非法活动。 / (c) 2015。 快速开始 获取源代码库后,您可以使用 IDE 打开 ...

    风越ASP代码生成器FireAspCreatorv2.9.rar

    02、支持Microsoft SQL Server、Microsoft Access、Oracle、MySql、Excel、FoxPro、FoxBase、Text等数据库连接 03、支持从数据表、视图(Access为查询)中读取数据字段 04、支持通过数据表中的组合主键传递参数 05、...

    Hibernate注解

    很奇怪),分别是CascadeType.PERSIST(级联新建),CascadeType.REMOVE(级联删除),CascadeType.REFRESH(级联刷新),CascadeType.MERGE(级联更新),CascadeType.ALL(全部四项) * 方法一 * 主表: ?@OneToOne...

Global site tag (gtag.js) - Google Analytics