一触即发之触发器——【牛腩新闻发布系统】

一、什么是触发器?

   触发器(Trigger),顾名思义,一触即发。

 这里的触发指:调用某事件(如insert,delete,update)的时候执行触发器的操作,就像连锁反应一样。

 作用:保证数据完整性,加强数据的完整性约束和业务规则。说白了也就是保持数据一致性,不能同一字段在不同的数据表里面数据不一致。

二、触发器的优缺点?

好处:

  度娘如是说:在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。

  解读:约束此处应该指的是数据库完整性约束。约束,触发器,索引等都是为了保证数据的正确性和一致性而存在的。

  常见约束:唯一性(Unique)和主键约束(Primary key)、外键约束(Foreign key)、检查约束(Check)、空值约束(NOT Null)、默认值约束(Defult)。

  比如之前我们做过的《机房收费系统》,进行充值后,不仅仅要插入充值记录到充值表里面,还要更新学生的卡余额,通过上面的这些约束,无法做到同时更新两个表的数据,这就可以用到触发器。这样可以避免数据更新不同步造成的数据错误,不一致现象。

缺点:

  物极必反,凡事存在两面性。滥用触发器同样会给我们带来麻烦。比如影响数据库的结构,增加维护的复杂程度。

三、触发器常见的应用-级联删除

 学过《数据库系统原理》的同学都应该对主外键关系有所了解。如果一条SQL语句存在外键,想要删除该语句,就必须要先删除外键关联的表中对应的语句。比如牛腩里面的类别表(category)里面包含新闻表(news)的外键,新闻表(news)又包含评论表(comment)的外键,要想删除的时候要先根据新闻类别,找到该类别下的新闻,再找到新闻下的评论,先删除评论,然后是新闻,再是新闻类别,才能进行删除。

代码实例:

<span style="font-family:SimSun;"><span style="font-family:Microsoft YaHei;"><span style="font-family:SimSun;font-size:18px;">USE [newssystem]
GO
/****** Object:  Trigger [dbo].[trigCategoryDelete]    Script Date: 02/02/2015 23:22:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		王美
-- Create date: 2015年2月2日
-- Description:删除类别触发器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
   ON  [dbo].[category]
   instead of  DELETE
AS
BEGIN
	declare @caId int--定义id
	select @caId=id  from deleted  --从删除的里面取出id

	--删除评论
	delete comment where newsId in(select newsId from news where [email protected] ) 

	--删除新闻
	delete news where  caId [email protected] --先删除类别下面的所有新闻
	--删除类别
	delete category where id [email protected] --删除该类别

END
</span></span></span>

四、总结

  机遇之于人就像触发器的事件,前提是要时刻完善自身的触发器,这样才不会与机遇失之交臂。

时间: 2024-11-05 14:49:52

一触即发之触发器——【牛腩新闻发布系统】的相关文章

牛腩新闻发布系统---外键约束下如何删除记录

一.为什么使用外键? 查了些资料,八个字"保持完整性.一致性",结合我之前做的重构机房收费系统,我的理解是"防止相关表中数据没有关联而变得孤立,最终导致数据冗余",得出这个结论是上次让贾丽敏帮忙点系统时候我最深刻的感受,因为我的数据库关系图中辣么多张表却没有丝毫关系-- 既然官方解释是"完整性和一致性",就先来说明一下: 对于完整性和一致性,不少人都混为一谈了. 完整性(integrity)更多是针对实际业务来说的,比如说一个职员ID,不能在一个

点滴的积累---牛腩新闻发布系统总结

最近学习状态一直都不错,最近敲完牛腩新闻发布系统后又看了看<培养计划6.0>发现"牛腩新闻发布系统"的作用其实就是一个成语--抛砖引玉.在该新闻发布系统中基本上涉及到了B/S开发所需要具备的知识模块(HTML.Asp.net.XML.JavaScript.CSS.DIV.JQuery.AJAX).通过这个小的系统我的学习也将从C/S转移到B/S上,当然这个小的系统带给我的远远不止这些. 一.重新认识了软件开发的流程. 之前虽然学习过UML.软件工程等也算对系统开发有了初步的

承上启下——牛腩新闻发布系统总结

牛腩新闻发布系统视频前段时间已经看完了,但一直没有总结.系统是做完了,但还是有很多遗留的问题.本来想看完ASP.NET的视频以后再回来改,可这系统越放着就越不想再去改. 再拿起这个系统,调整调整了很多格式不足的地方,终于发布成功了! 牛老师的视频可以分成以下几个部分: 一是准备: 包括文档.画图部分,设计数据库等内容.这也是整个系统的总体规划和设计阶段,它起着举足轻重的地位,它是基础.前提.但也总是被很多人忽略. 二是后台: 与前台相比,后台更容易理解和学习,主要是功能的实现,其中很多部分都是在

牛腩新闻发布系统笔记——怎么写CSS

根据这牛腩学习敲新闻发布系统已经有一段时间了,挺佩服牛腩的,讲那么多东西,我听着也不觉得枯燥,反而有种,一不留神就会错过很多东西的感觉,所以有些地方也是重复又重复的在看. 这篇博客就总结总结小编在学习牛腩新闻发布系统的时候一些笔记.可能知识还比较原生态,but who cares.现在先提炼出来,以后慢慢的体会和升华吧. 牛腩一部分可以说是和机房相似,也是让我从.net到c#的一个过渡.中间一部分就是讲div +css了.里面的知识说多也不多的,根据不同的需求,它又有各种变形和组合,这加起来就有

牛腩新闻发布系统——真假分页

牛腩新闻发布系统已近尾声,牛老师重磅推出真假分页作为压轴,足以见得分页的重要性.我们就一起看一下真假分页的实现以及各自的特点. 一.分页简介 当我们显示足够大的数据量时,所有数据显示在一页上,会造成不必要的麻烦,本着为用户服务的态度,我们往往采用分页显示的处理办法.分页主要分为真分页与假分页. 假分页: 从数据库一次性取出所有数据绑定到控件上,再将所有数据根据每页显示记录条数进行分页.当数据量 比较大时,这种分页方法会造成查询速度, 使用户体验度降低,但是跳页速度较快. 真分页:在执行查询操作的

浅谈牛腩新闻发布系统

结束了漫长的C/S之旅,跨入B/S的学习,一切又是崭新的,充满希望. B/S的学习首先接触的便是牛腩老师的新闻发布系统,看了这么多年的网页终于要自己来编写一个网页了着实还是让我小小激动了一把.但是敲这个系统的时候总是有一种走迷宫,迷迷茫茫的感觉,什么跟什么啊... 于是,我机智的决定我要先把视频看一遍,至少要看一多半,至少得让我直到这个系统大概的框架吧.看了一半多终于形成了一个模糊的框架: 牛腩新闻发布系统分为前台和后台两部分,个人理解其实就像我们机房收费的UI层和B,D层的关系,前台负责显示给

牛腩新闻发布系统总结——网站发布和分页制作

牛腩新闻发布系统的视频看了将近半个月的时间,今天成功地把它发布了,哈哈.第一次看教学视频看得这么专注,都不带走思的,很不错.给小牛老师赞一个,嘿嘿! 言归正传,每学完一个阶段,最重要的就是总结,所以就允许我以倒序的形式,颗粒归仓吧! 牛腩新闻发布系统的发布 参考博文: win7下IIS的安装和配置 http://www.jb51.net/article/29787.htm VS2010网站发布详解 http://wanghaitaoboke.blog.163.com/blog/static/17

牛腩新闻发布系统总结(四)--知识点滴

紧接上篇博客:牛腩新闻发布系统总结(三)----知识点滴,继续我们的总结: 第五,在回复评论后如何保持滚动条的位置不变: <%@ Page Title="新闻内容-牛腩新闻发布系统" Language="C#" MasterPageFile="~/common.Master" AutoEventWireup="true" CodeBehind="newsContent.aspx.cs" Inherit

牛腩新闻发布系统--重构SQL Helper

天外有天,人外有人.自我进提高班以来,一直都在考虑,先前重构机房的时候,看到别人在D层加了SQL Helper,就一定要学者加上玩玩,等做完了以后,进行下一个阶段牛腩的时候,又看到了人家建的SQL Helper,不觉感慨,跟人家比,人家就是我的老师! 闲话就不多说了,进行正式的话题:如何写好SQL Helper?从宏观上讲,SQL Helper是完全体现了面向对象的抽象和封装的思想的.它对重复代码抽取出来,进行抽象,抽象就是为了封装,提高了代码的复用. 那么就该讨论怎么写的问题.如果我先上来给大

【牛腩新闻发布系统】----你的验证码正确么

前言 这是一个神奇的网站--牛腩新闻发布系统,虽然做的不咋地,但毕竟是自己动手敲出来,还是有一点点的满足感.同时这也是小编的第一个雠小鸭,长相不算漂亮,发育还是挺健全的. 终有一天我的丑小鸭会变成白天鹅. 一步一步的进化,一步一步的蜕变-- 你的验证码正确么 哎呀--为什么我的牛腩新闻发布系统   请输入验证码的图片一直为这个样子呀--不显示,就是不显示图片,图片加载出错呀.想想估计是图片路径不正确. 尝试一:牛老师说的图片加载路径 <img src="handler/WaterMark.