簡略觸發器的應用 獻給SQL初學者。本站提示廣大學習愛好者:(簡略觸發器的應用 獻給SQL初學者)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略觸發器的應用 獻給SQL初學者正文
起首,煩瑣幾句空話以下:
(1)觸發器(trigger)是個特別的存儲進程,它的履行其實不須要我們去顯式挪用,而是由一些事宜觸發,這有點相似C#中的事宜處置機制。當應用UPDATE,INSERT 或DELETE的一種或多種對指定的數據庫的相干表停止操作時,會觸發觸發器。
(2)觸發器可以包括龐雜的SQL語句,重要用於強迫龐雜的營業規矩或請求。
(3)觸發器可以或許保持數據庫的完全性,當履行拔出、更新或刪除操作時,觸發器會依據表與表之間的關系,強迫堅持其數據的完全性。
好,煩瑣完了開端貼代碼,起首貼上我創立的兩張表所包括的列,他們的聯系關系關系是1對多,以UserID停止聯系關系。
然後來一個異常簡略的觸發器
IF EXISTS(SELECT * FROM sysobjects
WHERE name='tr_Users_OnUpdate' AND TYPE='TR')
DROP TRIGGER tr_Users_OnUpdate
GO --這裡呢創立觸發器與存儲進程相似(都是DDL)
--先斷定如否存在同名觸發器就刪除然後重建
CREATE TRIGGER tr_Users_OnUpdate
ON Users FOR UPDATE
AS PRINT ‘Users表已產生修正'
GO
上述代碼中,tr_Users_OnUpdate為觸發器稱號,Users為表名。這觸發器的感化是當向Users表履行Update時將打印“Users表已產生修正”。
好了我們可以看到這個觸發器的適用性不是很年夜,那末接上去呢我們再來進修下關於觸發器裡兩種特別的表“inserted”和“deleted”。這兩張表重要用於觸發器。Deleted 表用於存儲 履行DELETE 和 UPDATE操作時所影響的行的正本。而Inserted 表則用於存儲 INSERT 和 UPDATE 語句所影響的行的正本。那末我們看到履行UPDATE操作時都邑有記載分離存儲到“inserted”和“deleted”。其實懂得起來不難deleted表存儲的是Update之前的記載,而inserted存儲的呢則是Update以後的記載,這裡關於實際性器械我不再贅述,官方材料有更具體解釋。
如今我們要做的就是本文的重點,當往WordInfo添加一筆記錄時,應用觸發器使UserInfo的響應記載的LeaveCount字段增長1。代碼以下:
--添加留言的觸發器
IF EXISTS(SELECT name FROM sysobjects WHERE name='tr_LeaveWord_Add' AND TYPE='TR')
DROP TRIGGER tr_LeaveWord_Add
GO
CREATE TRIGGER tr_LeaveWord_Add
ON WordInfo FOR INSERT
AS UPDATE UserInfo SET LeaveCount=LeaveCount+1
WHERE UserID=(SELECT TOP 1 UserID FROM Inserted)
GO
OK,到這裡便可以出工了,值得留意的是假如觸發器是UPDATE觸發的,那末在履行Update後再查詢更新之前的數據改成查詢deleted表便可。