`
hanjian861202
  • 浏览: 165076 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Oracle:多表级联删除方法

阅读更多

创建数据库时为了防止其他人不小心删除操作错误, 所有的外键都没有加级联删除。哪知,不知什么时候自己入了一批错误的数据进去,入库使用的是软件自动的,一下点错给自己带来无尽麻烦啊,删除就不好办了。 表间的关系比较复杂,数据量又比较多,一个个删绝对会出大问题。于是实验了几种解决的办法,现小结一下。


 

方法一:创建约束时设定级联删除

(但一般由于各种原因或出于各种考虑在创建数据库时没有设定级联删除)

SQL语句:

CREATE TABLE "U_WEN_BOOK"."FARTAB" ("FAR_ID" NUMBER(10) NOT NULL,

    "FAR_NAME" VARCHAR2(10), "OTHER_NAME" VARCHAR2(10),

    CONSTRAINT "PK_FER" PRIMARY KEY("FAR_ID"))

 

CREATE TABLE "U_WEN_BOOK"."CHILTAB" ("CHIL_ID" NUMBER(10) NOT

    NULL, "CHIL_NAME" VARCHAR2(10), "CHIL_OTHER" VARCHAR2(10),

    "FAR_ID" NUMBER(10) NOT NULL,

    CONSTRAINT "PK_CHIL" PRIMARY KEY("CHIL_ID"),

    CONSTRAINT "FK_CHIL" FOREIGN KEY("FAR_ID")

REFERENCES "U_WEN_BOOK"."FARTAB"("FAR_ID") ON DELETE CASCADE)

 

方法二:创建约束时没有使用级联删除,在需要使用级联删除时,删除原来的外键约束,重建带级联删除的约束

(实验证明完全可行,注意需要对已经存在的数据进行验证,否则新建的约束对原有数据不具备效率,默认是验证的,若强制要求不验证,使用NOVALIDATE关键词。还有外键引用的只能是唯一主键)

SQL语句:

ALTER TABLE "U_WEN_BOOK"."GCHILTAB1"

    DROP CONSTRAINT "FK_G1"

ALTER TABLE "U_WEN_BOOK"."GCHILTAB1"

  ADD (CONSTRAINT "FK_G1" FOREIGN KEY()

    REFERENCES "U_WEN_BOOK"."CHILTAB"()

    ON DELETE CASCADE)

(这样就可以级联删除了,删除完后,如果不放心这样的约束条件,并且不嫌麻烦可以再重建为不带级联删除等外键约束,防止误操作)

 

方法三:使用触发器(创建时没有级联删除)

(比较灵活,可以根据自己编写的程序进行,引用的不是唯一主键也可以)

(1)       创建表及插入数据

      SQL语句:

create   table orderCombine   (  

                                    O_Id          VARCHAR2(16)     not   null,  

                                   OrderId       VARCHAR2(15)     not   null,                        

                                   FormerId     VARCHAR2(16)     not   null,  

                                   constraint   PK_ORDERCOMBINE   primary   key   (FormerId) );

   create table VIPForm  (  

                         V_Id         VARCHAR2(16)     not   null,              

                         IsValid      CHAR(1)   default   '0'     not   null,                  

                         Constraint fk_vipform foreign key(V_id)   references   ordercombine(formerid)

                         );  

insert into orderCombine values('1','1','1');

insert into orderCombine values('2','2','2');

insert into vipform values('1','5');

insert into vipform values('2','4');

 insert into vipform values('1','2');

 

结果:

 

(2)创建触发器:

SQL:

CREATE OR REPLACE TRIGGER "FG123"."TER_OV"

BEFORE

DELETE ON "ORDERCOMBINE" FOR EACH ROW

BEGIN

DELETE   FROM   VIPForm

WHERE   VIPForm.V_Id=:OLD.FormerId;

END;

分享到:
评论

相关推荐

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

    以下将详细介绍三种在Oracle中实现多表级联删除的方法。 **方法一:创建约束时设定级联删除** 在创建表时,可以通过定义外键约束并指定`ON DELETE CASCADE`选项来实现级联删除。例如: ```sql CREATE TABLE "U_...

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

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

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

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

    完整ORACLE创建表空间、用户、设置用户权限脚本

    - **cascade constraints**: 级联删除表空间中的所有外键约束。 ### 总结 以上脚本提供了一种完整的方法来创建Oracle数据库中的表空间、用户,并设置了必要的权限。这对于快速搭建开发环境或进行数据库管理非常...

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

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

    oracle创建数据库表空间.doc

    Oracle 创建数据库表空间 Oracle 是一种流行的关系数据库管理系统,创建数据库表空间是 Oracle 数据库管理员的一项基本任务。本文将详细介绍如何在 Linux 环境下创建和删除 Oracle 表空间及用户。 一、创建临时表...

    oracle 收缩undo表空间

    - `CASCADE CONSTRAINTS`:级联删除依赖于该表空间的约束。 #### 七、注意事项 1. **备份**:在执行任何可能导致数据丢失的操作之前,请确保已经进行了充分的备份。 2. **性能影响**:在进行Undo表空间的切换操作...

    10_传智播客JPA详解_JPA中的一对多双向关联与级联操作

    在数据库设计中,一对多关联是指一个实体(表)可以与多个其他实体相关联,比如一个班级可以有多名学生。在JPA中,通过在实体类中定义`@OneToMany`注解来表示这种关系。这个注解通常会配合`mappedBy`属性使用,指定...

    Oracle常用的和表(Table)相关的命令

    - `cascade constraints`: 级联删除相关约束。 - `checkpoint`: 检查点设置。 ### 5. 标记列为未使用(Mark Column as Unused) **命令格式**: ``` sql> alter table table_name set unused column comments cascade...

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

    - `CASCADE`选项表示级联删除,即在删除用户的同时也会删除该用户拥有的所有对象。 #### 五、删除表空间 1. **删除表空间前的注意事项**: - 在删除表空间之前,需要确保该表空间不再被其他用户使用。 - 如果表...

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

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

    Oracle 新建表空间及用户

    ### Oracle新建表空间及用户的详细步骤与命令 在Oracle数据库管理中,新建表空间和用户是常见的操作之一。本文将详细介绍如何使用Oracle SQL命令来创建表空间和用户,并赋予相应的权限。 #### 一、创建临时表空间 ...

    oracle添加表空间用户及授权

    - **`CASCADE`**:级联删除用户创建的所有对象,包括表、索引等。 ### 总结 以上步骤详细介绍了在Oracle数据库中如何创建临时表空间、永久表空间,以及如何创建用户并对其进行权限分配的过程。通过这些SQL命令,...

    oracle电子文档:数据库约束.rar

    2. **级联删除与更新**:外键约束的ON DELETE CASCADE和ON UPDATE CASCADE选项可以自动处理相关行的删除和更新,但可能会引发意外的数据删除。 五、实际应用案例 1. **员工信息表**:员工ID为主键,姓名、性别等为...

    4.oracle 再次学习1

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

    oracle中的权限

    同时,Oracle支持权限的级联授予(WITH GRANT OPTION),允许被授予者再将权限转授给其他用户。 除了上述基础权限,Oracle还有更高级的权限控制,如`RESOURCE LIMIT`、`AUDIT`和`PROFILE`,它们用于限制用户资源...

    精通Oracle核心技术和项目实战之触发器.

    - **级联更新**:当一个表中的数据发生变化时,自动更新相关表中的关联数据。 - **审计追踪**:记录表上的操作,便于后续的审计工作。 - **数据同步**:实现不同数据库节点之间的数据同步更新。 - **日志记录**:...

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

    使用`DROP USER`命令可以删除用户,`CASCADE`选项会级联删除用户的所有对象: ```sql DROP USER BCC CASCADE; ``` 6. **删除表空间**: 删除表空间前需要确保没有其他用户在使用它。删除命令如下: ```sql ...

Global site tag (gtag.js) - Google Analytics