`
wengsibo
  • 浏览: 81273 次
  • 性别: 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中的三种级联操作,其中Oracle定义外健的时候可以定义级联删除,但是没有级联修改的语法,当然可以用触发器实现,下面我们详细来看Oracle数据库中的级联查询、级联删除、级联更新操作教程

    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大作业.doc

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

    ORACLE与SQLSERVER的区别

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

    Oracle创建删除用户.docx

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

    oracle_dynamic_sql.rar_Dynamic SQL ORAC_oracle_oracle dynam_orac

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

    Oracle常用的一些语法、命令和函数

    1. **删除表时级联删除约束**: `drop table 表名 cascade constraints` 这个命令在删除表的同时会删除与之相关的约束,包括外键约束,这将会影响到依赖于该表的其他对象。 2. **级联删除**: `on delete cascade...

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

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

    Oracle sql宝典

    级联更新和级联删除可通过 `DEFERRABLE` 和 `ON DELETE CASCADE` 设置。 - **唯一性约束**:确保某一列的值全库唯一,如 `CREATE TABLE only_test(id number primary key, name varchar2(20) unique)`。 - **检查...

    oracle创建数据库表空间.doc

    其中,`DROP USER` 指定删除的是用户,`test` 是用户名,`CASCADE` 指定了级联删除该用户下所有对象。 八、常见错误和解决方法 在创建和删除表空间、用户时,可能会遇到一些错误,例如权限不足、文件系统满等。...

    sql与oracle的区别[定义].pdf

    Oracle仅支持级联删除的外键约束,而SQL还支持级联更新。 最后,SQL的临时表使用#或##开头,会在使用后自动释放,而Oracle的临时表存在于数据库中,每个会话的数据独立。 总的来说,SQL与Oracle在设计哲学和功能...

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

    当不再需要用户时,可以使用`DROP USER`命令删除,但需要注意的是,如果用户下仍有对象,需要使用`CASCADE`参数来级联删除所有关联对象,如: ```sql DROP USER zfmi CASCADE; ``` 删除表空间也需谨慎,确保无其他...

    mldn oracle视频笔记

    - `FOREIGN KEY`约束实现表间关联,遵循删除规则(删除顺序,以及Oracle的`CASCADE CONSTRAINT`级联删除)。 6. **ROWNUM伪列**: - 记录行号,可用于筛选和分页查询。 7. **集合操作**: - 包括`UNION`(合并...

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

    用户删除通常会伴随着其所有对象的删除,使用`cascade`参数可以级联删除: ```sql drop user 用户名 cascade; ``` 删除表空间时,确保无其他用户正在使用,并使用`including contents`和`including datafiles`参数...

    Oracle基本语句

    在 Oracle 中,级联删除需要使用 ALTER TABLE 语句,例如: ```sql ALTER TABLE stuinfo ADD CONSTRAINT stu_fk FOREIGN KEY (stu_id) REFERENCES students(id) ON DELETE CASCADE; ``` 这条语句添加了一个名为 stu_...

    4.oracle 再次学习1

    Oracle支持级联删除,当删除一个表的记录时,与之关联的其他表中的相关记录也会被删除。在创建外键约束时,可以指定`ON DELETE CASCADE`来启用这一特性。这在保持数据完整性和一致性时非常有用。 6. **创建表空间*...

Global site tag (gtag.js) - Google Analytics