在做个人版机房的时候没有用到触发器,于是在做新闻发布系统的时候再一次遇到,第一次使用,第一印象就是里边充满了逻辑问题和顺序问题,下面先从基本的讲起:
什么是触发器??
它是一种特殊的存储过程,不像普通存储过程,它是由事件触发而不是人为决定。它经常用于加强数据约束的完整性和业务规则。
为什么要用触发器??
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触发器,它是在执行删除某条语句之前所要触发的事件。实践和应用就会让知识变得不再陌生,放下内心的陌生感,仅仅去做,一定可以的!