`
hanjian861202
  • 浏览: 158613 次
  • 性别: 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中多表级联删除的方法

    方法一:创建约束时设定级联删除(但一般由于各种原因或出于各种考虑在创建数据库时没有设定级联删除)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文档

    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. 数据文件...

    oracle_dynamic_sql.rar_Dynamic SQL ORAC_oracle_oracle dynam_orac

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

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

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

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

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

    mysql数据库的基本操作语法

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

    Hibernate注解

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

    jdbc基础和参考

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

    风越asp代码生成器 V3.5

    10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...

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

    10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...

    sql总结.doc

    1、 (1)索引是对数据库表中一列或多列进行排序的一种结构。 (2)Mysql中搜索引擎Innodb(聚簇索引)和Mysiam(非聚簇索引)都采用B+,oracle也采用B+树实现 注:聚簇索引:一张表只能建立一个聚簇索引,以主键建立...

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

    10、支持自动生成多组多级的级联下拉框功能,快速建立如:省、市、县/公司、部门、小组等形式下拉框 ★ 11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名...

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

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

    asp.net知识库

    可按任意字段排序的分页存储过程(不用临时表的方法,不看全文会后悔) 常用sql存储过程集锦 存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! ...

Global site tag (gtag.js) - Google Analytics