牛腩新闻发布系统——触发器

       看到“触发器”三个字我的第一印象就是:一触即发。最开始听说触发器是在耿建玲老师的SQL视频中听到的,当时一听触发器好高大上,时隔一年之久,触发器的面纱渐渐的为我摘下。


什么是触发器:


       触发器(trigger):是SQL Server提供给程序员和数据分析员来保证数据完整性的一种方法,他是与表事件相关的特殊的存储过程,他的执行不是由程序调用,也不是手工启动,而是由事件触发的(百度百科)。

       以我个人的理解就是:触发器就是一个方法,这个方法中存储着有对表操作的SQL语句。其实触发器也是是特殊的存储过程,只不过触发器需要一个事件来推动它发生。过程有事件过程和通用过程,触发器就属于事件过程。


为什么使用触发器:


       因为触发器是特殊的存储过程,那么他必然也带有一些存储过程的优点。对于多表的复杂操作,他可以将这个复杂的操作进行封装。同时还有一点点的不同就是,触发器可通过数据库中的相关表实现级联(主键,外键)更改。这样就会带来很多省事的地方。


如何使用触发器:


      一下举一个在牛腩中的例子。删除类别,同时将此类别下的新闻,评论都要进行删除。

SQL

USE [newssystem]
GO
/****** Object:  Trigger [dbo].[triDelete]    Script Date: 09/07/2014 14:29:44 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[triDelete]
on [dbo].[category]
instead of delete
 
AS 
BEGIN
declare @caId int
select @caId=id from deleted 
---删除评论
delete comment  where newsId  in(select newsId from news where caId =@caId  )	
----删除新闻
delete news where caId =@caId 
----删除类别
delete category where id =@caId 
END

      同时还要注意的是,虽然触发器和存储过程很相像,但是触发器的建立离不开表,而存储过程的建立需要建立在库下。


在D层代码:

/// <summary>
        /// 删除类别(连同旗下的新闻以及新闻评论一起删除)——用到触发器
        /// </summary>
        /// <param name="id">只要说删除第几个就OK了</param>
        /// <returns>返回Boolean型</returns>
        public Boolean Delete(string id)
        {
            bool flag = false;
            string cmdText = "delete * from category where id=@id";
            SqlParameter[] paras = new SqlParameter[]
            {
                new SqlParameter ("@id",id )
            };
            int res = sqlhelper.ExecuteNonQuery(cmdText, paras, CommandType.Text);
            if (res > 0)
            {
                flag = true;
            }
            return flag;
        }

       在U层中要给一个事件,比如说Click事件去触发这个方法的实现。这里就不展示U层代码,实际上在D层的代码没有改变,依旧是一个删除语句,不同的就是在SQL中的触发器的语句。

       通过上次写的存储过程的D层代码以及本次的触发器的D层代码,我们可以发现存储过程中俄cmdText这个链接字符串知识一个存储过程的名称,而触发器的却是和普通的SQL增删改语句相同的语句。这应该就是百科上的那句话:触发器和存储过程唯一区别是触发器不能执行Execute语句调用,而是在用户执行Transaction—SQL语句时自动触发执行。

       触发器的功能很强大,但是我们还是要谨慎的使用,如果各个地方都用到了触发器,这样会破坏数据的结构,给后期的维护都会带来不便。


你可能感兴趣的:(牛腩新闻发布系统——触发器)