牛腩新聞發佈系統——觸發器

       看到“觸發器”三個字我的第一印象就是:一觸即發。最開始聽說觸發器是在耿建玲老師的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語句時自動觸發執行。

       觸發器的功能很強大,但是我們還是要謹慎的使用,如果各個地方都用到了觸發器,這樣會破壞數據的結構,給後期的維護都會帶來不便。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章