當前位置:首頁 » 編程語言 » sql觸發器作用

sql觸發器作用

發布時間: 2022-04-21 14:25:54

『壹』 sql 觸發器的作用

用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。
DELIMITER | CREATE TRIGGER `<databaseName>`.`<triggerName>` < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] > ON <tableName> FOR EACH ROW BEGIN --do something END |
觸發器可通過資料庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以強制比用CHECK約束定義的約束更為復雜的約束。與 CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的復雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性(RI) 則應通過 FOREIGN KEY 約束進行強制。在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。
例如:除非 REFERENCES 子句定義了級聯引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值完全匹配的值來驗證列值。
CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。如果應用程序要求根據另一個表中的列驗證列值,則必須使用觸發器。約束只能通過標準的系統錯誤信息傳遞錯誤信息。如果應用程序要求使用(或能從中獲益)自定義信息和較為復雜的錯誤處理,則必須使用觸發器。
觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。觸發器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數據修改。當更改外鍵且新值與主鍵不匹配時,此類觸發器就可能發生作用。例如,可以在 titleauthor.title_id 上創建一個插入觸發器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達到這個目的。
如果觸發器表上存在約束,則在 INSTEAD OF 觸發器執行後但在 AFTER 觸發器執行前檢查這些約束。如果約束破壞,則回滾 INSTEAD OF 觸發器操作並且不執行 AFTER 觸發器。 觸發器到底可不可以在視圖上創建 在 SQL Server™ 聯機叢書中,是沒有說觸發器不能在視圖上創建的, 並且在語法解釋中表明:在 CREATE TRIGGER 的 ON 之後可以是視圖。 然而,事實似乎並不是如此,很多專家也說觸發器不能在視圖上創建。我也專門作了測試,的確如此,不管是普通視圖還是索引視圖,都無法在上面創建觸發器,真的是這樣嗎? 請點擊詳細,但是無可厚非的是:當在臨時表或系統表上創建觸發器時會遭到拒絕。

『貳』 SQL觸發器有什麼用處啊

觸發器是一種特殊類型的存儲過程,它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。觸發器可以查詢其它表,並可以包含復雜的 Transact-SQL 語句。將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待。如果檢測到嚴重錯誤(例如,磁碟空間不足),則整個事務即自動回滾。 觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。 觸發器可以強制比用 CHECK 約束定義的約束更為復雜的約束。 與CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。 觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。 一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。 比較觸發器與約束 約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的復雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。 實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性 (RI) 則應通過 FOREIGN KEY 約束進行強制。 在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。例如: 除非REFERENCES 子句定義了級聯引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值完全匹配的值來驗證列值。 CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。如果應用程序要求根據另一個表中的列驗證列值,則必須使用觸發器。 約束只能通過標準的系統錯誤信息傳遞錯誤信息。如果應用程序要求使用(或能從中獲益)自定義信息和較為復雜的錯誤處理,則必須使用觸發器。 觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。 觸發器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數據修改。當更改外鍵且新值與主鍵不匹配時,此類觸發器就可能發生作用。例如,可以在 titleauthor.title_id 上創建一個插入觸發器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達到這個目的。 如果觸發器表上存在約束,則在 INSTEAD OF 觸發器執行後但在 AFTER 觸發器執行前檢查這些約束。

『叄』 SQLSERVER中觸發器的觸發類型有幾種

SQL SERVER中觸發器的觸發類型有三種。

1、DML觸發器,當資料庫中表中的數據發生變化時,包括insert,update,delete任意操作,如果對該表寫了對應的DML觸發器,那麼該觸發器自動執行。

2、DDL觸發器,是Sql Server2005新增的觸發器,主要用於審核與規范對資料庫中表,觸發器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。它在資料庫結構發生變化時執行,主要用它來記錄資料庫的修改過程,以及限製程序員對資料庫的修改。

3、登錄觸發器,登錄觸發器將為響應 LOGIN 事件而激發存儲過程。與 SQL Server 實例建立用戶會話時將引發此事件。登錄觸發器將在登錄的身份驗證階段完成之後且用戶會話實際建立之前激發。

(3)sql觸發器作用擴展閱讀:

DML觸發器的主要作用在於強制執行業 務規則,以及擴展Sql Server約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發器中則可以執行任意Sql命令。

來自登錄觸發器內部且通常將到達用戶的所有消息(例如錯誤消息和來自 PRINT 語句的消息)會傳送到 SQL Server 錯誤日誌。如果身份驗證失敗,將不激發登錄觸發器。

觸發器可在寫入數據表前,強制檢驗或轉換數據。觸發器發生錯誤時,異動的結果會被撤銷。可依照特定的情況,替換異動的指令 (INSTEAD OF)。

『肆』 SQL觸發器的具體含義與主要用途

觸發器是一種特殊類型的存儲過程,不由用戶直接調用。創建觸發器時會對其進行定義,以便在對特定表或列作特定類型的數據修改時執行。
提供了兩種主要機制來強制業務規則和數據完整性:約束和觸發器。觸發器是一種特殊類型的存儲過程,它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。觸發器可以查詢其它表,並可以包含復雜的 Transact-SQL 語句。將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待。如果檢測到嚴重錯誤(例如,磁碟空間不足),則整個事務即自動回滾。

『伍』 誰知道在SQL中什麼是觸發器,有什麼作用

觸發器是一種特殊類型的存儲過程,不由用戶直接調用。創建觸發器時會對其進行定義,以便在對特定表或列作特定類型的數據修改時執行。
CREATE PROCEDURE 或 CREATE TRIGGER 語句不能跨越批處理。即存儲過程或觸發器始終只能在一個批處理中創建並編譯到一個執行計劃中。
用觸發器還可以強制執行業務規則
Microsoft® SQL Server64 2000 提供了兩種主要機制來強制業務規則和數據完整性:約束和觸發器。觸發器是一種特殊類型的存儲過程,它在指定的表中的數據發生變化時自動生效。喚醒調用觸發器以響應 INSERT、UPDATE 或 DELETE 語句。觸發器可以查詢其它表,並可以包含復雜的 Transact-SQL 語句。將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待。如果檢測到嚴重錯誤(例如,磁碟空間不足),則整個事務即自動回滾。
觸發器的優點如下:
觸發器可通過資料庫中的相關表實現級聯更改;不過,通過級聯引用完整性約束可以更有效地執行這些更改。
觸發器可以強制比用 CHECK 約束定義的約束更為復雜的約束。
與CHECK 約束不同,觸發器可以引用其它表中的列。例如,觸發器可以使用另一個表中的 SELECT 比較插入或更新的數據,以及執行其它操作,如修改數據或顯示用戶定義錯誤信息。
觸發器也可以評估數據修改前後的表狀態,並根據其差異採取對策。
一個表中的多個同類觸發器(INSERT、UPDATE 或 DELETE)允許採取多個不同的對策以響應同一個修改語句。
比較觸發器與約束
約束和觸發器在特殊情況下各有優勢。觸發器的主要好處在於它們可以包含使用 Transact-SQL 代碼的復雜處理邏輯。因此,觸發器可以支持約束的所有功能;但它在所給出的功能上並不總是最好的方法。
實體完整性總應在最低級別上通過索引進行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創建的。假設功能可以滿足應用程序的功能需求,域完整性應通過 CHECK 約束進行強制,而引用完整性 (RI) 則應通過 FOREIGN KEY 約束進行強制。
在約束所支持的功能無法滿足應用程序的功能要求時,觸發器就極為有用。例如:
除非REFERENCES 子句定義了級聯引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值完全匹配的值來驗證列值。
CHECK 約束只能根據邏輯表達式或同一表中的另一列來驗證列值。

『陸』 sql觸發器如何用,有什麼作用。最好列舉三個、、、

觸發器就是一個特殊的存儲過程,但是觸發器沒有輸入參數,顧名思義是由某種特定的條件觸發的。舉個例子,如果你有2個表a,b其中a裡面的id跟b裡面的id綁定,a是學生基本信息表,b是學生選課信息表,假使某個同學被開除,那麼a表裡面該同學的信息就必須刪除,那麼竟然該同學都被開除了,b表裡面的信息自然也都應該一並除去,這個時候就可以建立這樣一個觸發器在a表上,觸發條件為delete,只要發現a表有信息刪除,則自動刪除b表中相應id的信息。這樣可以保證整個系統的健壯性。不會出現bug(學生基本信息都刪除但是選課信息還在的現象)
以下是一個實例:
create trigger t_delete_TranD//觸發器的名字為t_delete_TranD
on TranD//觸發器建立在表TranD上
for delete//表TranD上的delete操作是觸發器執行的觸發條件
as
begin//以下是觸發器執行的內容
update ContainerPick
set Status = '3',
TranNo = null
from ContainerPick a,deleted d
where a.TranNo = d.TranNo and
a.ContainerPackNo = d.DistNo and
a.Status = '4'
if @@error<>0//執行失敗的處理
begin
raiserror 33334 '恢復棧板狀態失敗!'
rollback
return
end
end
go

『柒』 SQL中,觸發器是什麼

1. 基本概念
觸發器是特殊的存儲過程,基於一個表創建,主要作用就是實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據一致性。
當觸發器所保護的數據發生變化(update,insert,delete)後,自動運行以保證數據的完整性和正確性。通俗的說:通過一個動作(update,insert,delete)調用一個存儲過程(觸發器)。
2. 類型
(1)DML觸發器
在資料庫中發生數據操作語言(DML)事件時將啟用。DML 事件包括在指定表或視圖中修改數據的 INSERT 語句、UPDATE 語句或 DELETE 語句。DML 觸發器可以查詢其他表,還可以包含復雜的 T-SQL 語句。系統將觸發器和觸發它的語句作為可在觸發器內回滾的單個事務對待,如果檢測到錯誤(例如,磁碟空間不足),則整個事務即自動回滾。
(2)DDL 觸發器
SQL Server 2005 的新增功能。當伺服器或資料庫中發生數據定義語言(DDL)事件時將調用這些觸發器。但與DML觸發器不同的是,它們不會為響應針對表或視圖的UPDATE、INSERT或DELETE語句而激發,相反,它們會為響應多種數據定義語言(DDL)語句而激發。這些語句主要是以CREATE、ALTER和DROP開頭的語句。DDL觸發器可用於管理任務,例如審核和控制資料庫操作。
創建DML觸發器
1. 使用存儲過程模板創建存儲過程
在【對象資源管理器】窗口中,展開「資料庫」節點,再展開所選擇的具體資料庫節點,再展開「表」節點,右擊要創建觸發器的「表」,選擇「新建觸發器」命令,如圖所示:
在右側查詢編輯器中出現觸發器設計模板,用戶可以在此基礎上編輯觸發器,單擊「執行」按鈕,即可創建該觸發器。

2. 使用T-SQL語句創建表
CREATE TRIGGER 觸發器
ON 表名
FOR[update,insert,delete ]
AS SQL語句
例9-6:創建基於表reader ,DELETE操作的觸發器。
USE Library
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='reader_d' AND type='TR')
DROP TRIGGER reader_d --如果已經存在觸發器reader_d則刪除
GO
CREATE TRIGGER reader_d --創建觸發器
ON reader --基於表
FOR DELETE --刪除事件
AS
PRINT '數據被刪除!' --執行顯示輸出
GO
試試吧!
應用:
USE Library
GO
DELETE reader
where Rname='aaa'
執行結果:
數據被刪除!
(所影響的行數為 1 行)
例9-7:在表borrow中添加借閱信息記錄時,得到該書的應還日期。
說明:在表borrow中增加一個應還日期SReturnDate。
USE Library
IF EXISTS (SELECT name FROM sysobjects
WHERE name ='T_return_date' AND type='TR')
DROP TRIGGER T_return_date
GO
CREATE TRIGGER T_return_date --創建觸發器
ON Borrow --基於表borrow
After INSERT --插入操作
AS
--查詢插入記錄INSERTED中讀者的類型
DECLARE @type int,@dzbh char(10),@tsbh char(15)
SET @dzbh=(SELECT RID FROM inserted)
SET @tsbh=(SELECT BID FROM inserted)
SELECT @type= TypeID
FROM reader
WHERE RID=(SELECT RID FROM inserted)--副本
/*把Borrow表中的應還日期改為
當前日期加上各類讀者的借閱期限*/
UPDATE Borrow SET SReturnDate=getdate()+
CASE
WHEN @type=1 THEN 90
WHEN @type=2 THEN 60
WHEN @type=3 THEN 30
END
WHERE RID=@dzbh and BID=@tsbh
應用:
USE Library
INSERT INTO borrow(RID,BID) values('2000186010','TP85-08')
查看記錄:

例9-8:在資料庫Library中,當讀者還書時,實際上要修改表brorrowinf中相應記錄還期列的值,請計算出是否過期。
USE Library
IF EXISTS(SELECT name FROM sysobjects
WHERE name='T_fine_js' AND type='TR')
DROP TRIGGER T_fine_js
GO
CREATE TRIGGER T_fine_js
ON borrow
After UPDATE
AS
DECLARE @days int,@dzbh char(10),@tsbh char(15)
SET @dzbh=(select RID from inserted)
SET @tsbh=(select BID from inserted)
SELECT @days=DATEDIFF(day, ReturnDate, SReturnDate)
--DATEDIFF函數返回兩個日期之差,單位為DAY
FROM borrow
WHERE RID=@dzbh and BID=@tsbh
IF @days>0
PRINT '沒有過期!'
ELSE
PRINT '過期'+convert(char(6),@days)+'天'
GO
應用:
USE Library
UPDATE borrow SET ReturnDate='2007-12-12'
WHERE RID='2000186010' and BID='TP85-08'
GO
執行結果:
過期-157 天
(1 行受影響)
例9-9:對Library庫中Reader表的 DELETE操作定義觸發器。
USE Library
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='reader_d' AND type='TR')
DROP TRIGGER reader_d
GO
CREATE TRIGGER reader_d
ON Reader
FOR DELETE
AS
DECLARE @data_yj int
SELECT @data_yj=Lendnum
FROM deleted
IF @data_yj>0
BEGIN
PRINT '該讀者不能刪除!還有'+convert(char(2),@data_yj)+'本書沒還。
ROLLBACK
END
ELSE
PRINT '該讀者已被刪除!'
GO
應用:
USE Library
GO
DELETE Reader WHERE RID='2005216119'
執行結果:
該讀者不能刪除!還有4 本書沒還。
修改觸發器
ALTER TRIGGER 觸發器
刪除觸發器
DROP TRIGGER 觸發器
查看觸發器
sp_helptext trigger_name
sp_helptrigger table_name

『捌』 sql server 觸發器有什麼用

觸發器是一種特殊類型的存儲過程,它不同於之前的我們介紹的存儲過程。觸發器主要是通過事件進行觸發被自動調用執行的。而存儲過程可以通過存儲過程的名稱被調用。 什麼是觸發器 觸發器對表進行插入、更新、刪除的時候會自動執行的特殊存儲過程。觸發器一般用在check約束更加復雜的約束上面。觸發器和普通的存儲過程的區別是:觸發器是當對某一個表進行操作。諸如:update、insert、delete這些操作的時候,系統會自動調用執行該表上對應的觸發器。SQL Server 2005中觸發器可以分為兩類:DML觸發器和DDL觸發器,其中DDL觸發器它們會影響多種數據定義語言語句而激發,這些語句有create、alter、drop語句。

http://www.cnblogs.com/hoojo/archive/2011/07/20/2111316.html

『玖』 資料庫觸發器有什麼作用

觸發器的作用:

自動計算數據值,如果數據的值達到了一定的要求,則進行特定的處理。

同步實時地復製表中的數據。

實現復雜的非標準的資料庫相關完整性規則。

可在寫入數據表前,強制檢驗或轉換數據。

觸發器發生錯誤時,異動的結果會被撤銷。

部分資料庫管理系統可以針對數據定義語言(DDL)使用觸發器,稱為DDL觸發器。

可依照特定的情況,替換異動的指令 (INSTEAD OF)。


(9)sql觸發器作用擴展閱讀:

分類

SQL Server 包括三種常規類型的觸發器:DML 觸發器、DDL 觸發器和登錄觸發器。

DML觸發器

當資料庫中表中的數據發生變化時,包括insert,update,delete任意操作,如果我們對該表寫了對應的DML觸發器,那麼該觸發器自動執行。

DML觸發器的主要作用在於強制執行業 務規則,以及擴展Sql Server約束,默認值等。因為我們知道約束只能約束同一個表中的數據,而觸發器中則可以執行任意Sql命令。

DDL觸發器

它是Sql Server2005新增的觸發器,主要用於審核與規范對資料庫中表,觸發器,視圖等結構上的操作。比如在修改表,修改列,新增表,新增列等。

它在資料庫結構發生變化時執行,我們主要用它來記錄資料庫的修改過程,以及限製程序員對資料庫的修改,比如不允許刪除某些指定表等。

登錄觸發器

登錄觸發器將為響應 LOGIN 事件而激發存儲過程。與 SQL Server 實例建立用戶會話時將引發此事件。登錄觸發器將在登錄的身份驗證階段完成之後且用戶會話實際建立之前激發。

因此,來自觸發器內部且通常將到達用戶的所有消息(例如錯誤消息和來自 PRINT 語句的消息)會傳送到 SQL Server 錯誤日誌。如果身份驗證失敗,將不激發登錄觸發器。

參考資料來源:網路-觸發器

『拾』 sql的觸發器是干什麼的,怎麼用

觸發器是用來保證數據一致性用的.他分為兩種一種是操作前觸發另外一種是操作後觸發 ,主要是對數據的插入,刪除,修改等動作進行跟蹤及作出相應動作

熱點內容
hypixel手機國際版伺服器ip 發布:2025-01-25 09:14:36 瀏覽:598
荒島求生安卓怎麼下載 發布:2025-01-25 09:09:31 瀏覽:209
java中io流 發布:2025-01-25 09:02:54 瀏覽:878
華為高斯資料庫 發布:2025-01-25 08:55:38 瀏覽:31
php是動態語言 發布:2025-01-25 08:45:44 瀏覽:67
伺服器關閉了電腦網路還能用 發布:2025-01-25 08:22:28 瀏覽:588
熱血航線的登錄密碼在哪裡可以看 發布:2025-01-25 08:22:27 瀏覽:770
5系怎麼選擇配置 發布:2025-01-25 08:22:18 瀏覽:843
pythonscipy 發布:2025-01-25 08:18:52 瀏覽:419
恕瑞瑪伺服器地址 發布:2025-01-25 08:18:51 瀏覽:802