`
huobengluantiao8
  • 浏览: 1050844 次
文章分类
社区版块
存档分类
最新评论

ASP.NET系统开发(二):漫话级联删除“三剑客”

 
阅读更多

在数据库中我们所面对的绝大多数都是关联表,表与表之间通过外键相互关联成一个“联盟”,在我们对数据表中的数据进行删除操作时往往会因为外键的作用牵一发而动全身,使得操作失败。说到这我们首先简单的来了解一下表间关联。




如上图中所示的三张表,分别代表的是guojia表(国家),sheng表(省),shi表(市)。在sheng表与guojia表之间,guojia表为主键表,sheng表为外键表,通过将sheng表中的suoshuguojia字段与guojia表中的id字段相互关联将两张表关联起来,表明sheng从属于某一个guojia。同样通过将shi表中的suoshusheng字段与sheng表中的id字段相互关联将两张表关联起来,表明shi从属于某个sheng。这样三张表之间就建立了关联,于是我们希望在删除guojia表中某条记录同时删除属于该国家的省连同属于该省的市的时候便会出现如下错误提示:

消息547,级别16,状态0,第1行,DELETE语句与REFERENCE约束"FK_chengshi_guojia"冲突。该冲突发生于数据库"newssystem",表"dbo.sheng",column'suoshuguojia'语句已终止。

稍懂英文的人都可以看明白这显然是由于外键的作用而导致的删除失败,那么我们究竟怎样才能达到级联删除的目的呢?别着急,下面我就为大家引荐三位剑客来帮助大家解决这个问题:


一、踏雪无痕----触发器

首先我们先来了解一下触大侠的简历:

触发器可以说是一种特殊的存储过程,但它并不像一般存储过程那样供外界调用,它是通过事件来触发的。触发器分为两种,分别是instead of触发器和after触发器。能够引发触发器的触发事件则有三种分别是insert、update和delete事件。After触发器指的是当触发事件发生的时候,先执行该事件,然后再执行预设代码,instead of触发器指的是当触发事件发生后并不执行该触发事件,而是越过触发事件执行预设代码。下面我们就做一个触发器来实现数据的级联删除:

CERATETRIGGER  [shanchu]
   		ON [dbo].[category]
  		 instead of DELETE
AS
BEGIN
		--声明一个变量
		Declare @caid int
		--给变量赋值												        
		Select @caid=id from deleted   
		--删除市
		Delete shi where id=(selectsuoshusheng from sheng where suoshuguojia=@caid)
		--删除省
		Delete sheng wheresuoshuguojia=@caid
		--删除国家
		Delete guojia where id=@caid
End

可能有的同学会问,为什么要用instead of触发器而不用After触发器呢?这还得从级联删除的机制说起。当我们执行级联删除操作时,它会一级一级的向下查找,如我们执行语句 delete guojiawhere id=1(删除第一级数据)的时候它会自动向下检查第二级中是否存在属于该国家的省的数据,如果不存在的话它会直接执行删除操作将国家表中的相应数据删除,但是当第二级中存在相应的数据的时候由于外键的作用便不能删除第一级中的数据,同理第二级数据和第三级数据也是一样。由此,我们可以得出一个结论,如果表之间存在外键关联的话,删除上一级数据的前提是下一级中不存在相应数据。

通过上面的讲解我相信大家现在很容易的就能理解为什么用instead of触发器了。原因就在于after触发器是在执行删除操作之后再执行我们所设定的代码的,但是由于外键的作用,根本就不允许执行删除操作,既然根本就不存在执行删除操作那么有何来执行删除操作之后之说呢。Instead of触发器就恰好避免了上述问题,由于instead of触发器是越过触发事件来执行预设语句的,所以当删除事件发生的时候并不是执行删除操作,而是执行下面的预设语句来先删除第三级数据,再删除第二级语句最后在删除第一级语句。当下一级中没有数据的时候那上一级的数据自然可以删除了。


二、江南圣手—存储过程

存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户在使用存储过程的时候只要指定存储过程的名字并给出相应的参数就可以了。存储过程是SQL语句和可选控制流语句的预编译集合,以一个名字存储并作为一个存储单元。说的更直白一点,存储过程更像是存储在数据库中的一个类,在类的内部封装了属性和方法,使用时,只要给它一个参数便能够执行相应的功能。如果一定要概括一下它的优点,大体可分为以下几点:


1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。


2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。


3.存储过程可以重复使用,可减少数据库开发人员的工作量


4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

触发器触大侠可以看成是存储过程的弟子,既然徒弟可以轻而易举的做到级联删除,那么我们来看看师傅是如何处理级联删除的吧:

CREATE PROCEDURE [dbo].[shanchu]
    --声明一个整形变量caid
    (@caid int)
AS
BEGIN
		--删除市
		deleteshi where suoshusheng in (select id from sheng where suoshuguojia = @caid )
		--删除省
		deletesheng where suoshuguojia = @caid
		--删除国家
		deleteguojia where id=@caid
END


当我们执行这个存储过程的时候只要调用该存储过程并给出参数就完全OK了,其格式为:exec +存储过程名 + 参数。对比一下触发器和存储过程我们可以发现其实质并没有多大的改变,其不同点大致也可以归为这么两点:一是变量声明的位置和形式变了。二是使用过程,触发器是等待事件被触发时属于被动使,而存储过程属于主动调用。


三、卧底隐侠--约束本身

这是在做系统中最让我感到郁闷的了,SQL Server 2005以上的版本中都支持数据表的级联删除。我们所需要做的仅仅是对关联关系进行一下设定即可。由于最初没有发现这个功能导致我不得不使用存储过程和触发器,是它隐藏的太深还是我的发现力太差,让人又气又恼。好吧,现在教你轻松搞定级联删除:

1. 新建数据库关系表,添加需要建立外键关联的数据表

2. 将对应的主键表的主键和外键表的某个字段建立外键关系。弹出如下页面:


3.按照上图椭圆处将删除规则设定为“层叠”,按照需要依次将需要建立外键关联的表进行上述设置,无论数据有几级都可以进行彻底删除。


分享到:
评论

相关推荐

    八年级语文:漫话小行星(教案设计).pdf

    八年级语文:漫话小行星(教案设计).pdf

    中科大苏淳教授:漫话概率论ppt.pdf

    - 二项分布:多次独立重复试验中成功的次数的分布。 - 泊松分布:描述在固定时间或空间内随机发生的事件的次数的概率分布。 - 均匀分布:在某个区间内取值的随机变量取任意小段内值的概率相等。 - 正态分布:...

    《漫话e》作者: 李大潜 编 出版年: 2011年

    一、对数——化乘除为加减二、常用对数三、对数的尺度四、e的现身——从一个复利问题谈起五、自然指数函数和自然对数函数六、无所不在的e七、离不开e的奇妙曲线八、由实变数到复变数附表 常用对数的尾数表(兼作常用...

    漫话IP:TCP_IP基础知识读本

    漫话IP:TCP_IP基础知识读本

    Easy-Programming:漫话编程:通俗易懂的分享基础知识,[数据结构与算法系列],[LeetCode系列],[子系统系列],[设计模式系列],[并发编程系列],[SQL编程] ...合集!同步更新到公众号CVBear以及在线博客http

    轻松编程[漫话编程] 通俗易懂的教会你必备基础知识!下面是模块介绍,持续更新中..... ! 设计模式[设计模式] 目的:直白的说设计模式是[原始阅读]的初步知识! 创建型模式 结构型模式 行为型模式 单例原型建造者...

    漫话数学.pdf

    第一章 从计算机说起 第二章 数是什么 第三章 运算的规律 第四章 怎样才能算的快 第五章 对数、算尺与算图 ……

    《解码三大数学常数:e的密码》《漫话e》

    《解码三大数学常数:e的密码》与《漫话e》这两本书都是关于数学常数e的科普读物,旨在深入浅出地介绍这个神秘而重要的数学概念。数学常数e,通常表示为2.71828…,在数学中占据着至关重要的地位,它不仅在自然对数...

    初等组合学漫话 算法的基础

    ### 初等组合学漫话:算法的基础 在探讨初等组合数学之前,我们首先要明确这一领域的核心概念及其与算法之间的联系。初等组合数学作为数学的一个分支,它研究的是有限集合元素的不同组合方式,包括排列、组合以及...

    《教育漫话》对幼儿教育实践的启示_0.doc

    《教育漫话》是17世纪英国哲学家约翰·洛克的一部重要教育著作,它对幼儿教育实践提供了深刻的启示。洛克在书中强调了健康教育、道德教育和知识教育的重要性,这些观点至今仍对现代幼儿教育有着深远的影响。 首先,...

    某漫话网站

    非常漂亮的情感心灵花园漫话系统演示:http://www.1t2k.cn/软件容量:58MB(含本地图片数据)后台管理:admin.asp密码:admin 修改密码请到adsel.asp文件中修改第二行。心灵花园是我花了不少时间整出来的贴图漫画程序...

    漫话数据结构-双向链表及基本操作.pptx

    "漫话数据结构-双向链表及基本操作"的讲座涵盖了双向链表的概念、构建、插入和删除操作,以及双向循环链表的特性。这些知识对于理解和掌握数据结构的基础至关重要,同时也是提升编程技能和解决实际问题能力的重要...

    漫话九月会

    《漫话九月会》是一篇回顾旧时中国北方地区农历九月集市活动的文章。文章通过对过去一段历史时期九月会的描述,带读者回到作者童年时的记忆中,展现了那个时代特有的社会生活和风俗习惯。从文章中可以提取出以下知识...

    漫话数据结构-猴子选大王.pptx

    《漫话数据结构-猴子选大王》是一个有趣的数据结构应用问题,通常称为“约瑟夫环”或“猴子选大王”。这个问题描述了一个虚拟的猴子选举过程,通过一定的淘汰规则来确定大王。在这个过程中,我们可以看到数据结构在...

    漫话数据结构-什么是查找.pptx

    总的来说,“漫话数据结构-什么是查找”引导我们理解查找的本质、相关术语和分类,以及查找在实际问题中的应用。通过学习,我们可以提升解决问题的能力,为编写高效、优化的程序奠定基础,拯救程序的灵魂。

    《教育漫话》读后感5000字#(精选.)[001].pdf

    《教育漫话》是约翰·洛克的教育经典之作,它以信件的形式,深入探讨了家庭教育的诸多方面,尤其强调了教育的重要性和深远影响。洛克认为教育错误对人的影响是无法轻易消除的,而且人的品质和能力很大程度上由教育...

    漫话互联网产品经理.pptx

    在《漫话互联网产品经理》中,作者深入浅出地介绍了产品经理的职责、工作内容以及所需技能。 首先,让我们明确什么是产品经理。产品经理是产品的管理者,他们对产品的整个生命周期负全责,从构思到上市,再到最终的...

    初中语文语文论文漫话教育诚信

    初中语文语文论文漫话教育诚信

    漫话数据结构-串的存储及操作.pptx

    【漫话数据结构-串的存储及操作】深入解析 数据结构是计算机科学中的核心概念,它涉及到如何高效地组织和存储数据以便于执行各种操作。在这个话题中,我们将聚焦于“串”的存储和操作,这是数据结构中的一个重要...

    漫话数据结构-冒泡排序.pptx

    冒泡排序是一种基础的排序算法,它通过重复遍历待排序的列表,...在"漫话数据结构"这样的学习资源中,通过轻松易懂的方式讲解这些基础概念,能够有效地拯救程序的灵魂,让学习者更好地掌握数据结构和算法的基础知识。

Global site tag (gtag.js) - Google Analytics