在做个人版机房的时候没实用到触发器。于是在做新闻公布系统的时候再一次遇到。第一次使用。第一印象就是里边充满了逻辑问题和顺序问题,以下先从主要的讲起:
什么是触发器??
它是一种特殊的存储过程。不像普通存储过程。它是由事件触发而不是人为决定。它经经常使用于加强数据约束的完整性和业务规则。
为什么要用触发器??
1、速度快:存储过程在调用前就已经编译好了,所以存储过程能以极快的速度运行。
2、存储过程能够反复使用,可降低数据库开发者的工作量 。
3、保证数据的安全性:使没有权限的用户在控制之下间接地存取数据库
4、保证数据的完整性:使相关的动作在一起发生
触发器能够随便用吗?
不能够,不论什么事物都有两面性,因为我们的滥用会造成数据库及应用程序的维护困难,在数据库操作中,我们能够通过关系、触发器、存储过程、应用程序等来实现数据操作……同一时候规则、约束、缺省值也是保证数据完整性的重要保障。假设我们对触发器过分的依赖,势必影响数据库的结构。同一时候添加了维护的复杂程度。
触发器都有哪些内容呢?
以下来看一张图:
结合实例看一下:
在博客開始我说触发器有逻辑性和顺序性是在做新闻公布系统中感受到的。新闻公布系统中用到的触发器是删除新闻类别。它有级联效果和顺序,尽管说用户在删除的时候是删除的类别,但在数据库中的操作却不只如此:依据类别id--查找新闻表下要删除的新闻(但不删除)--依据找到的新闻id--查找评论表下新闻id相应的全部评论--删除评论--删除新闻--删除类别,看一下代码:
<span style="color: rgb(51, 51, 51); background-color: rgb(240, 240, 240);">-- ============================================= -- Author: 王丹 -- Create date: 2014-06-09 20:14 -- Description: 删除类别触发器 -- ============================================= ALTER TRIGGER [dbo].[trigCategoryDelete] ON [dbo].[category] </span><span style="color: rgb(51, 51, 51); background-color: rgb(255, 255, 102);">instead of</span><span style="background-color: rgb(240, 240, 240);"><span style="color:#333333;"> </span><span style="color:#ff0000;">DELETE</span><span style="color:#333333;"> AS BEGIN declare @caId int --查找要删除的id select @caId=id from deleted delete comment where newsId=(select newsId from news where caId=@caId ) --删除新闻 delete news where caId=@caId --删除类别 delete category where id=@caId END</span></span>以上这个样例用到的是instead of触发器,它是在运行删除某条语句之前所要触发的事件。实践和应用就会让知识变得不再陌生。放下内心的陌生感,只去做,一定能够的!