`

多表关联删除常用方法小结

阅读更多

对于多表联合查询可能大部分开发者不会过于陌生,但是对于初学者经常会在建表时忽略主外键约束,或者没有数据库编程的经验,不会使用类似于触发器、存储过程这些。当需要对多表进行删除操作时,无外乎进行后台的多表联合查询,后台判断是否存在关联,存在关联则不删除,不存在则使用DML语言删除并返回前台结果。

现把经常用到的几个多表联合删除的方法总结如下,并附具体例子:

1.级联删除(on delete set null 、  on delete cascade)属于外键关联的一种
事例一(网络资源)
 create table a
(
id  varchar(20) primary key,
password varchar(20) not null
)

create table b
(
id int identity(1,1)  primary key,
name varchar(50) not null,
userId varchar(20),
foreign key (userId) references a(id) on delete cascade
)
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
insert a values ('11','aaa')
insert a values('23','aaa')
insert b values('da','11')
insert b values('das','11')
insert b values('ww','23')
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了

delete a where id='11'

 

事例二(网络资源)

 

create table dept_test
(deptno number(10) not null,
 deptname varchar2(30) not null,
 constraint pk_dept_test primary key(deptno));

create table emp_test
(empno number(10) not null,
 fname varchar2(20) ,
 lname varchar2(20) ,
 dept number(10) ,
 constraint pk_emp_test primary key(empno));

 

alter table emp_test
add constraint fk_emp_dept_test foreign key(dept) references dept_test(deptno) on delete set null;

 

insert into dept_test values(1,'销售部');
insert into dept_test values(2,'财务部');
insert into emp_test values (2,'Mary','Song',1);
insert into emp_test values (3,'Linda','Liu',2);
insert into emp_test values (4,'Linlin','Zhang',1);

 

delete from dept_test where deptno = 1;
1 row deleted.

 

SQL> select * from emp_test;
     EMPNO FNAME          LNAME                  DEPT
---------- -------------------- -------------------- ----------
     2 Mary           Song
     3 Linda          Liu                     2
     4 Linlin          Zhang

SQL> select * from dept_test;
    DEPTNO DEPTNAME
---------- ------------------------------
     2 财务部
可以看到emp_test中参照dept_test中deptno=1的两条记录对应dept值已经置为空。


 

SQL> truncate table emp_test;
Table truncated.

SQL> truncate table dept_test;
truncate table dept_test
               *
ERROR at line 1:
ORA-02266: unique/primary keys in table referenced by enabled foreign keys
此时也是禁止清空dept_test表,drop相同。


如果想要删除父表,可以有两种方法:

1、先drop子表,再drop父表。

2、先删除约束alter table emp_test drop constraint fk_emp_dept_test;,再drop父表。

2.采用存储过程(数据库开发)
 
A表:
AID   Aname                                 主健:AID
B表:
BID   BelongAID Bname               主健:BID,外健:BelongAID 
C表:
CID BelongBID Cname                  主健:CID,外健:BelongBID
D表:
DID BelongCID Dname                  主健:DID,外健:BelongCID
其中:
A表和B表通过A.AID和B.BelongAID  创建了外健关系
B表和C表通过B.BID和C.BelongBID  创建了外健关系
C表和D表通过C.CID和D.BelongCID  创建了外健关系


3.采用触发器(个人喜欢用的,当然要看实际需要)

删除Text 表中的一条记录的同时删除对应记录表 relog中的记录

create trigger Text_delete on Text for delete

as

begin

delete from relog where tid = (select rid from relog)

end


 

 

 

分享到:
评论

相关推荐

    python字典的常用操作方法小结

    本文章主要介绍Python中字典(Dict)的详解操作方法,包含创建、访问、删除、其它操作等,需要的朋友可以参考下。 字典由键和对应值成对组成。字典也被称作关联数组或哈希表。基本语法如下: 1.创建字典 >>> dict = {'...

    标准库容器小结.pdf

    无序关联容器,如unordered_map和unordered_multimap,基于哈希表实现,使得查找、插入和删除操作的平均复杂度为O(1),但在最坏情况下可能退化到O(N)。 unordered_set和unordered_multiset是无序关联容器,允许重复...

    C容器用法小结[借鉴].pdf

    vector是最常用的动态数组,支持随机访问,但在插入和删除元素时可能需要移动大量元素。string是专门用于字符串的容器,而deque(双端队列)允许在两端进行高效插入和删除,适合用作缓冲区。list则是一个双向链表,...

    Redis有序集合类型的常用命令小结

    有序集合中的每个元素都有一个唯一的成员(member)和一个与之关联的分数(score),分数决定了成员在集合中的排序。不同于集合,有序集合的元素不是无序的,而是按照分数从小到大排列。成员不能重复,但分数可以。 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     1.3 小结  1.4 思考题 第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    本章介绍一对多关联关系的映射方法,重点介绍inverse属性和cascade属性的用法。本章还将介绍通过Hibernate API来保存、修改和删除具有关联关系的对象的方法。 7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-...

    精通Hibernate:对象持久化技术第二版part3

    本章介绍一对多关联关系的映射方法,重点介绍inverse属性和cascade属性的用法。本章还将介绍通过Hibernate API来保存、修改和删除具有关联关系的对象的方法。 7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-...

    用友U8日常操作小结

    - **年终结转后的科目删除**:结转后删除科目需要清理相关联的内容,如凭证、转账定义等。 - **期初余额调整**:跨月调整期初余额需在未记账的状态下进行,若已记账,则需反记账。 - **清除损益类明细科目期初...

    Linux 内核通用链表学习小结

    这种设计提高了链表操作的灵活性,如插入和删除等。链表的基础结构是`struct list_head`,它包含两个指向其他`list_head`类型的指针,`next`和`prev`。 为了使用这个链表库,开发者需要在其自定义的数据结构中包含`...

    比较全面的PHP数组的使用方法小结

    除了上述的基本使用方法之外,PHP还提供了其他多种用于操作数组的函数,比如array_push()用于向数组末尾添加一个或多个元素,array_pop()用于移除数组最后一个元素并返回它,array_shift()移除数组第一个元素并返回...

    C#完全手册

    - **1.4 小结** - 本章介绍了.NET的概念、特点以及C#语言在.NET框架中的角色和特性。 - 重点强调了C#作为一种现代编程语言的重要性和实用性。 ##### 第二章:运行环境 —— 全面了解.NET - **2.1 .NET结构** - ...

    数据库系统概论(第五版)PPT第3章(2).ppt

    【数据库系统概论(第五版)PPT...10. **小结**:这部分可能总结了本章的主要概念和操作,帮助学习者巩固所学知识。 通过这些内容,读者可以了解到SQL的基本语法和常用操作,对于理解和应用数据库管理系统具有重要意义。

    用友T6软件过程中常见问题处理方案.doc

    用友T6是一款广泛应用于中小企业财务管理的软件,其功能涵盖了财务、供应链、生产制造等多个方面。在实际使用过程中,用户可能会遇到各种问题,以下是一些常见问题及其解决方案。 **系统方面** 1. **备份账套菜单...

    PB结课报告--学生管理系统

    - **功能描述**:集成常用的小工具,提高工作效率。 - **关键操作**: - 工具选择 - 工具使用 - **技术要点**: - 工具实用性:确保工具能够解决实际问题。 - 用户友好性:工具界面友好,易于操作。 ##### 8. ...

    EOS示例与教程.chm

    02.03.03 单表删除开发 02.03.03.01 案例开发 02.03.03.01.01 页面流开发 02.03.03.01.02 页面开发 02.03.03.01.03 逻辑流开发 02.03.03.01.04 完善页面流开发 02.03.03.02 部署运行 02.03.03.02.01 测试运行...

    疯狂Android讲义源码

     1.7 本章小结 33  第2章 Android应用的界面编程 35  2.1 界面编程与视图(View)组件 36  2.1.1 视图组件与容器组件 36  2.1.2 使用XML布局文件控制UI  界面 40  2.1.3 在代码中控制UI界面 41  2.1.4 使用...

Global site tag (gtag.js) - Google Analytics