`

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

阅读更多

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

    全国计算机二级复习知识点小结(VB卷).pdf

    数据结构则是互相关联的数据元素的集合,包括逻辑结构和存储结构。逻辑结构如线性结构和非线性结构,非线性结构包括树、二叉树和图等。存储结构主要包括顺序存储和链式存储,其中顺序存储如数组,所有元素连续存储;...

    Linux 内核通用链表学习小结

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

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

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

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

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

    C#教程 C#教程C# 教程 编程 程序

    - **1.4 小结** - C#作为.NET的核心编程语言,不仅提供了高效的编程体验,还充分利用了.NET框架的优势,使得开发者可以轻松构建高质量的应用程序。 **第二章:运行环境** - **2.1 .NET结构** - .NET Framework由...

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

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

    低清版 大型门户网站是这样炼成的.pdf

    1.5 小结 32 第2章 mvc混血宠儿struts 2 33 2.1 初识mvc新秀struts 2 33 2.1.1 mvc概述 33 .2.1.2 struts 2的mvc实现 35 2.1.3 struts 2的基本组成 36 2.1.4 struts 2的常用类介绍 38 2.1.5 struts 2的业务...

Global site tag (gtag.js) - Google Analytics