这篇博客主要写的是触发器和存储过程的应用、实例、优点、不同及弊端,最后通过总的分析,总结出谁更胜一筹。。

触发器

定义
     触发器是一种机制,用来强制业务规则和数据完整性,当指定表中的数据发生变化时自动生效,以响应INSERT、UPDATE或DELETE 语句。这也是它最主要的作用!

我们最常用的是DML触发器,当触发器在数据库中发生DML事件时启用,它会在表或视图中修改数据的insert、update、delete语句。。

实例
     下面,就用实例展示一下触发器的具体写法和用法。
     这个实例是当给卡号充值时,在给充值表插入数据的同时,也要更新学生表中的余额。

-- =============================================
-- Author:      <郭贤达>
-- Create date: <2015.6.7>
-- Description: <充值成功后,更改学生表里的余额>
-- =============================================--由于修改过该触发器,所以,create会自动变为alter
ALTER TRIGGER [dbo].[TR_UpdateBalance] --触发器名称ON  [dbo].[T_Recharge] --创建位置after insert --再插入数据之后AS --定义变量declare @InRows int,@CardNO varchar(10),@Recharge numeric(18,1)--通过查询给变量赋值select @Recharge=Recharge from inserted --inserted表示一个虚拟表来存放我们刚插入的数据select @CardNO=CardNO from inserted--查询该卡号的充值记录个数select @InRows =count(*) from T_Recharge  where CardNO =@CardNO --如果该卡号充值记录大于1,说明不是新注册用户,执行更新if @InRows>1BEGINSET NOCOUNT ON;--更改余额update T_Student set Cash=convert(numeric,Cash)+@Recharge where CardNO=@CardNO END
<span style="color: rgb(51, 51, 255);font-size:18px; font-weight: bold; line-height: 12pt; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">    </span>

优点
     咱们使用触发器当然是因为它的有很多优点,能给予我们方便,下面我就罗列一下它的好处:
     效率高
     触发器的开销非常低,运行触发器所占用的时间主要花在引用其它存于内存或磁盘上的表上。
     级联修改
     可实现多个表的级联修改。当需增删改某表的数据时,其关联表的相应数据也会自动增删改,保证数据的一致性。
     简单方便
     触发器的使用可以少写很多代码,以事件方式来处理,当数据发生变化的时候,,自动作处理,使我们对表的操作
更加简单。。

存储过程

定义
     存储过程是一组为了完成特定功能的SQL语句集,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参
数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
     咱们也可以理解为是一些写好的SQL语句集,就像是函数方法一样,都写好了封起来,需要用的时候,直接调用。

实例

-- =============================================
-- Author:      <郭贤达>
-- Create date: <2015-06-10 15:08:13>
-- Description: <从学生表中查询卡号,给退卡表添加数据,然后删除学生表,充值表和上机表中的数据>
-- =============================================ALTER PROCEDURE [dbo].[PROC_ExitCard]-- 定义变量@CardNO VARCHAR(10),@UserID varchar(10),@Name varchar(10),@ReturnCash varchar(10),@ExitCardDate varchar(20),@ExitCardTime varchar(20),@IsCheckOut varchar(20)
ASBEGINSET NOCOUNT ON;--给学生表添加数据insert into T_ExitCard(CardNO,UserID,Name,ReturnCash,ExitCardDate,ExitCardTime,IsCheckOut)values(@CardNO,@UserID,@Name,@ReturnCash,@ExitCardDate,@ExitCardTime,@IsCheckOut)--删除学生表、充值表、上机表数据delete T_Recharge where CardNO=@CardNOdelete T_Line where CardNO=@CardNOdelete T_Student where CardNO=@CardNOEND

     

优点
     简单方便
     存储过程是在数据库中事先写好的,经过第一次编译后再次调用不需要编译,运行速度比较快,降低了网络流量。可
以设置参数,根据传入参数的不同,重复使用同一个存储过程。。
     提高效率
     当对数据库进行复杂操作时,比如对多个数据表增删改查,咱们就可以利用存储过程进行封装,与数据库提供的事
务相结合。这样一来,可极大提高效率!而且,从代码的角度出发,它是与程序代码分离的,提高了程序代码的可读
性。。
     提高安全性
     可设定只有某批用户才能使用的权限;因为是参数化查询,可以防止SQL注入;存储过程可以接受参数、输出参 数、返回单个或多个结果集以及返回值,可以向程序返回错误原因。
 
 
     

触发器VS 存储过程

相同点
     当用户执行一个事件,而数据库需要做多处更新的时候,我们就可以考虑去使用它们。这样会使D层可以轻松可靠

的实现许多复杂的功能,提高效率和代码可读性。。

不同点
     执行条件
     触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。
     灵活性
     触发器是强制实行的,只要满足了触发的条件,用户是不能绕过触发器的。而相比之下,存储过程则相对具有灵活
性,在我们的代码中,可以决定什么时候调用存储过程。存储过程就像函数一样,用Execute语句来执行。
     弊端
     二者虽然强大,每种事物都有两种属性,有利必有弊!
     触发器执行有条件限制,不受用户控制,维护困难;存储过程由于只有一次编译,之后就只是调用,使后期的维护

工作是有挑战性。

总结
     总的来说,触发器和存储过程的使用,提高了系统执行效率,增强了可读性,使我们的工作方便简单,是值得提倡
的!二者具有一定的相同点,如果真要使用的话,应该首选存储过程。。当然,没有最好的,只有更适合的。。

由于师傅建议我使用原型图,所以,最近一直在学习,也许下一篇博客就是它,尽请期待吧!!!

分享:存储过程的创建与调用

【机房收费个人版】触发器与存储过程相关推荐

  1. 【机房收费个人版】七层登陆

    敲完七层登陆之后,让我认识到所谓的七层就是在三层的基础上添加了两个模式和一个SqlHelper.外观模式完美的体现了依赖倒转原则和迪米特法则的思想,降低了耦合性:反射+配置文件+抽象工厂模式,用于实现 ...

  2. 【机房收费个人版】SqlHelper

    之前敲完七层登陆之后,我天真的认为Sqlhelper就只是由一个function组成!!后来看到大家的博客,原来是由好几个function组成的,每个function都对应特定的数据库增删改查!现在想 ...

  3. 机房收费系统重构之存储过程的使用

    从一开始对于机房收费系统的无从下手,到现在已经接近尾声,像冬天的迷雾一样,随着时间散开了去,对于其也是越来越清晰,想一想,这种学习的过程还真是美妙. 当然只学习不去总结是没有意义的.今天我就来把存储过 ...

  4. 【机房收费个人版】DataTable 与泛型集合的较量

    将近三周的时间,我学到了很多知识,让我受益匪浅!也通过这三周的积累和整理,现在是时候写博客分享我的所知所得了..下面主要写DataTable.泛型集合以及它们之间的比较.. DataTable     ...

  5. 【机房收费系统个人版】三层登陆

    机房收费个人版这个项目,很早就开始进行了,但是直到现在还没有完成..原因有两方面,首先是自身的个人管理不到位.做事拖拖拉拉,没有很好的节制自身的不良习惯:其次是思想价值观极端化.世界上没有谁能将所有事 ...

  6. vb.net机房收费系统重构——存储过程的使用

    在敲写七层登陆过程中,接触了存储过程的概念,但当时还没使用.在正式的重构过程中,一点点添加,将存储过程也添加到了重构中.才正式了解了存储过程. 首先 [存储过程的概念] 存储过程Procedure是一 ...

  7. 机房收费系统中——存储过程中加入事务,实现学生注册

    需求介绍: 现在正在开发的机房收费系统,总得来说,是对学生上机进行收费管理(没有要在学校开网吧的意思啊!为了学习面开发的)大体的功能是这样的:学生上机,然后刷卡,下机的时候,再刷卡,然后通过对学生的上 ...

  8. 个人版机房收费——数据库设计

    在做机房收费系统个人版的时候又一次的遇到了数据库设计方面的内容,还记得第一次机房收费系统的时候,数据库的设计基本上是边敲边设计的,搞得特别的乱,也不符合编程的规范.既然我们现在已经是专业人士了,那么就 ...

  9. 机房收费系统.Net个人版总结

    机房收费系统.Net版到前两天为止才算是彻底完工了.从寒假开始的初步文档+图设计,以及之后的代码实现,到三月中旬开始的文档规范.图规范.代码规范.这个生命周期真是一个长啊.给自己总结了一下:本次机房收 ...

最新文章

  1. javascript 操作Word和Excel的实现代码
  2. 转载 CreateWaitableTimer和SetWaitableTimer函数
  3. .NET程序员,我们应该更专业点
  4. mybatis传参数
  5. 面试官:项目中常用的 .env 文件原理是什么?如何实现?
  6. (百度云服务器的)域名不加www可以访问,添加就不能访问 (添加域名绑定)- 解决篇
  7. Cisco 利用 802.1X、动态VLAN和DHCP技术实现方案
  8. subline修改字体大小和空格问题
  9. wxpython下载很慢_FAQ:在 Windows 使用 Python
  10. Jmeter逻辑控制器操作,附栗子
  11. Java学习之==注释、数据类型、变量、运算符
  12. 热烈庆祝blog开通
  13. 生成树协议计算机网络,【图片】生成树协议奇怪!我错哪了两边都绿了呀【计算机网络吧】_百度贴吧...
  14. django基础 第一章 环境搭建
  15. 职称论文的格式和规范
  16. JavaScript 弹出框(警告框、确认框、提示框)
  17. java代码实现一个月内不再提醒,通用到期问题
  18. 如何优化小红书笔记?教你三个小技巧,让你快速提高笔记排名
  19. Java中excel的导出导入
  20. spark数据挖掘 - 基于 Audioscrobbler 数据集音乐推荐实战

热门文章

  1. (7)3DMAX之倒角剖面修改器、扫描修改器、倒角剖面与扫描之间的区别
  2. 爱国者新品发布 智能果汁机助力双创 居家创业双赢新产能
  3. 编写js找到一个字符串中指定子字符串的所有位置
  4. 「Java基础」范型
  5. 关于自动生成数据集的一些事
  6. ZeroC Ice 暂记
  7. AI+教育 I 69天流利说APP学习浅谈自适应学习
  8. C/C++编程日记:C++ 实现太阳系行星项目系统
  9. CentOS7.5 重装 SSH 与 禁止网卡休眠
  10. 任天堂国行 Switch OLED 版 评测