`

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关键字

转自:http://cesium.iteye.com/blog/599516

分享到:
评论

相关推荐

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

    在Oracle数据库中,多表级联删除是一种常见的需求,特别是在数据关系复杂的环境中。级联删除允许在删除一个表中的记录时,自动删除依赖于该记录的其他表中的相关记录。以下将详细介绍三种在Oracle中实现多表级联删除...

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

    Oracle数据库中的级联查询、级联删除和级联更新是数据库设计中常用的操作,它们用于在多表关联的关系型数据库中实现数据的联动处理。在Oracle中,这些操作主要涉及外键约束和触发器。 首先,级联查询是通过自连接来...

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

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

    oracle_dynamic_sql.rar_Dynamic SQL ORAC_oracle_oracle dynam_orac

    本文将深入探讨动态SQL的使用及其在级联删除中的应用。 首先,让我们理解什么是动态SQL。在静态SQL中,SQL语句在编译时就已经确定。然而,动态SQL允许我们在程序执行时构建SQL语句,这意味着SQL的结构可以在运行时...

    Oracle数据库用户角色、表空间创建、删除命令

    - `CASCADE`:级联删除,即删除用户的同时也会删除该用户创建的所有对象,包括表、视图等。 #### 删除表空间 删除表空间前需确保该表空间未被任何用户使用: ```sql DROP TABLESPACE BCC INCLUDING CONTENTS AND ...

    Oracle创建删除用户、角色、表空间、导入导出数据库命令行方式总结

    `CASCADE`参数表示级联删除,即同时删除该用户的所有对象,包括表、视图等。若未指定`CASCADE`,且用户有对象,则无法直接删除用户。 #### 二、创建与删除表空间 **创建临时表空间**: ```sql CREATE TEMPORARY ...

    韩顺平老师oracle视频教程听课笔记

    `CASCADE`选项用于级联删除依赖对象。 - **用户管理综合案例** - 创建的新用户默认没有任何权限,需要授予相应的权限。 - 示例:`GRANT CONNECT TO xiaoming;` - 注意:`CONNECT`不是一个简单的权限,而是一个...

    oracle创建删除表空间和用户授权

    - `CASCADE CONSTRAINTS`表示级联删除依赖于该表空间的所有约束条件。 ### 二、创建与管理用户 #### 1. 创建用户 ```sql CREATE USER oa1 IDENTIFIED BY oa DEFAULT TABLESPACE poba TEMPORARY TABLESPACE temp; `...

    Oracle创建删除用户.docx

    删除Oracle用户及其所有对象,应使用`CASCADE`参数,确保级联删除所有相关对象: ```sql DROP USER 用户名 CASCADE; ``` 删除表空间时,需确保该表空间未被其他用户使用,且可能需要包含`INCLUDING CONTENTS`和`...

    oracle10g教程从入门到精通

    - 如果用户已经创建了表等对象,删除时需要带上 `cascade` 参数以级联删除所有依赖的对象。 - **用户权限管理** - 创建的新用户默认没有任何权限,需要通过 `grant` 命令为其分配相应的权限。 - 示例:`grant ...

    Oracle学习笔记 Oracle学习笔记

    `cascade`选项用于级联删除依赖于该用户的对象。 2. **密码管理** - 修改密码:使用`.password`命令修改密码,具体操作可能需要查看上下文环境中的实现细节。 3. **权限管理** - 权限授予:`grant permission to...

    oracle大作业.doc

    触发器可以实现级联更新、级联删除等操作。 数据库设计 数据库设计是数据库开发的基础。数据库设计需要根据业务需求、数据模型、数据库架构等进行设计。ER图是数据库设计的重要工具。数据模型需要根据业务需求、...

    ORACLE与SQLSERVER的区别

    SQL Server 的外键约束支持级联删除和级联更新,而 Oracle 只支持级联删除。创建外键约束时,两个系统都有相应的语法,但在级联操作上有所不同。 以上只是 Oracle 和 SQL Server 在几个关键方面的对比,实际上,...

    oracle(浪潮内部培训)

    通过使用触发器,你可以实现复杂的数据完整性规则,比如级联更新或删除,或者在数据更改前后执行某些业务逻辑。在培训中,你将学习如何创建、修改和删除触发器,以及如何调试和优化触发器性能。 三、存储过程 存储...

    oracle与sql_server的区别

    在处理外键约束时,SQL Server允许级联删除和级联更新,而Oracle仅支持级联删除。这意味着在SQL Server中,当主表中的记录被删除或更新时,依赖的子表记录也可以自动进行相应的更新或删除,提供了更强大的数据完整性...

    java培训oracle实用课件

    - **删除用户**:一般由`dba`用户执行,使用`drop user`语句,可能需要添加`cascade`选项以级联删除用户所拥有的所有对象。 ### 用户权限与角色 在Oracle中,用户权限分为两大类:系统权限和对象权限。系统权限如`...

    韩顺平.oracle实用教程(免费下载).

    - 若用户已创建表,则需使用`cascade`选项来级联删除依赖的对象。 - **用户权限管理**: - 创建的新用户通常没有权限,需要通过`GRANT`命令为其分配权限。 - 示例命令:`grant connect to 用户名`。 - `connect...

Global site tag (gtag.js) - Google Analytics