知识大全 解析Oracle中多表级联删除的方法

Posted

篇首语:采得百花成蜜后,为谁辛苦为谁甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 解析Oracle中多表级联删除的方法相关的知识,希望对你有一定的参考价值。

解析Oracle中多表级联删除的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

创建数据库时为了防止其他人不小心删除操作错误 所有的外键都没有加级联删除 哪知 不知什么时候自己入了一批错误的数据进去 入库使用的是软件自动的 一下点错给自己带来无尽麻烦啊 删除就不好办了  

  表间的关系比较复杂 数据量又比较多 一个个删绝对会出大问题 于是实验了几种解决的办法 现小结一下 方法一 创建约束时设定级联删除 (但一般由于各种原因或出于各种考虑在创建数据库时没有设定级联删除) SQL语句

复制代码 代码如下: CREATE TABLE "U_WEN_BOOK" "FARTAB" ("FAR_ID" NUMBER( ) NOT NULL "FAR_NAME" VARCHAR ( ) "OTHER_NAME" VARCHAR ( ) CONSTRAINT "PK_FER" PRIMARY KEY("FAR_ID")) CREATE TABLE "U_WEN_BOOK" "CHILTAB" ("CHIL_ID" NUMBER( ) NOT     NULL "CHIL_NAME" VARCHAR ( ) "CHIL_OTHER" VARCHAR ( )     "FAR_ID" NUMBER( ) 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" "GCHILTAB "     DROP CONSTRAINT "FK_G " ALTER TABLE "U_WEN_BOOK" "GCHILTAB "   ADD (CONSTRAINT "FK_G " FOREIGN KEY()     REFERENCES "U_WEN_BOOK" "CHILTAB"()     ON DELETE CASCADE) (这样就可以级联删除了 删除完后 如果不放心这样的约束条件 并且不嫌麻烦可以再重建为不带级联删除等外键约束 防止误操作)

   方法三 使用触发器(创建时没有级联删除) (比较灵活 可以根据自己编写的程序进行 引用的不是唯一主键也可以) ( )创建表及插入数据 SQL语句

复制代码 代码如下: create   table orderCombine   (   O_Id                     VARCHAR ( )     not   null    OrderId           VARCHAR ( )     not   null                          FormerId         VARCHAR ( )     not   null    constraint   PK_ORDERBINE   primary   key   (FormerId) );    create   table   VIPForm     (   V_Id                     VARCHAR ( )       not   null                IsValid           CHAR( )   default        not   null                        Constraint fk_vipform foreign key(V_id)   references   orderbine(formerid) );   insert into orderCombine values( ); insert into orderCombine values( ); insert into vipform values( ); insert into vipform values( ); insert into vipform values( );

   结果 ( )创建触发器 SQL

复制代码 代码如下: CREATE OR REPLACE TRIGGER "FG " "TER_OV" BEFORE DELETE ON "ORDERBINE" FOR EACH ROW BEGIN DELETE   FROM   VIPForm WHERE   VIPForm V_Id=:OLD FormerId; END;

   ( )删除及结果 SQL

复制代码 代码如下: DELETE FROM "FG " "ORDERBINE" WHERE FormerId =

   方法四 若表间关系简单(就两张表) 涉及到的记录也很少(总共就几行记录) 直接删除子表中的相关记录 再删除父表中的记录即可 (前面的方法在涉及数据量较大以及表间关系比较复杂时才有效率上的优势 简单的直接删除来的更快) 如上例中 直接删除 SQL语句

复制代码 代码如下: cha138/Article/program/Oracle/201311/19027

相关参考

知识大全 MySQL中多表删除方法

MySQL中多表删除方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如果您是才接触MySQL

知识大全 hibernate级联删除

  有两张表结构如下  Java代码  t_item            &n

知识大全 解析Oracle查询和删除JOB的SQL

解析Oracle查询和删除JOB的SQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对

知识大全 ORACLE多表关联UPDATE语句

ORACLE多表关联UPDATE语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为了方便起见

知识大全 Oracle 多表关联更新多个字段 带条件

Oracle多表关联更新多个字段带条件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  updat

知识大全 Oracle多表创建的视图insert解决方法

Oracle多表创建的视图insert解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  单

知识大全 oracle的多表插入

  在业务处理过程中经常会碰到将业务数据按照条件分别插入不同的数据表的问题按照传统的处理方式需要分条件执行多次检索后分别插入不同的表单这样因为执行了重复的检索造成cpu和内存的浪费从oraclei开始

知识大全 oracle多表查询与子查询

  (一)子查询select*fromtableA  whereidoperator(select*fromtableAawhereaid=)  operaor  单条记录子查询(

知识大全 Oracle强制删除用户

Oracle强制删除用户  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  有时候删除已经连接的Or

知识大全 Oracle删除归档日志实例

Oracle删除归档日志实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  当Oracle归档日