四種觸發(fā)器的特點 各類觸發(fā)器的特點?
各類觸發(fā)器的特點?觸發(fā)器是SQL server提供給程序員和數(shù)據(jù)分析人員的一種方法,用于確保數(shù)據(jù)完整性。它是一個與表事件相關(guān)的特殊存儲過程。它的執(zhí)行不是由程序調(diào)用或手動啟動的,而是由事件觸發(fā)的。例如,
各類觸發(fā)器的特點?
觸發(fā)器是SQL server提供給程序員和數(shù)據(jù)分析人員的一種方法,用于確保數(shù)據(jù)完整性。它是一個與表事件相關(guān)的特殊存儲過程。它的執(zhí)行不是由程序調(diào)用或手動啟動的,而是由事件觸發(fā)的。例如,當(dāng)一個表被操作(insert、delete、update)時,它的執(zhí)行將被激活。觸發(fā)器通常用于強制執(zhí)行數(shù)據(jù)完整性約束和業(yè)務(wù)規(guī)則。觸發(fā)器可用于在寫入數(shù)據(jù)表之前強制驗證或轉(zhuǎn)換數(shù)據(jù)。當(dāng)觸發(fā)錯誤發(fā)生時,更改的結(jié)果將被撤銷。一些數(shù)據(jù)庫管理系統(tǒng)可以將觸發(fā)器用于數(shù)據(jù)定義語言(DDL),稱為DDL觸發(fā)器??筛鶕?jù)具體情況更換。sqlserver包括三種觸發(fā)器:DML觸發(fā)器、DDL觸發(fā)器和login觸發(fā)器。
1. DML觸發(fā)器當(dāng)數(shù)據(jù)庫表中的數(shù)據(jù)發(fā)生變化時,包括insert、update、delete等任何操作,如果我們將相應(yīng)的DML觸發(fā)器寫入表中,那么觸發(fā)器將自動執(zhí)行。DML觸發(fā)器的主要功能是執(zhí)行業(yè)務(wù)規(guī)則并擴展sqlserver約束和默認(rèn)值。因為我們知道約束只能約束同一個表中的數(shù)據(jù),任意SQL命令都可以在觸發(fā)器中執(zhí)行。
2. DDL觸發(fā)器是sqlserver2005中的一個新觸發(fā)器。主要用于對數(shù)據(jù)庫中的表、觸發(fā)器、視圖等結(jié)構(gòu)的操作進(jìn)行審計和標(biāo)準(zhǔn)化。例如,在修改表、修改列、添加表、添加列等。它是在數(shù)據(jù)庫結(jié)構(gòu)發(fā)生變化時實現(xiàn)的。我們主要用它來記錄數(shù)據(jù)庫的修改過程,并限制程序員對數(shù)據(jù)庫的修改,比如不允許刪除一些指定的表。
3. Login觸發(fā)器Login觸發(fā)器觸發(fā)存儲過程以響應(yīng)登錄事件。在與SQL server實例建立用戶會話時引發(fā)此事件。登錄觸發(fā)器在登錄的身份驗證階段完成之后和用戶會話實際建立之前觸發(fā)。因此,所有來自觸發(fā)器內(nèi)部并通常到達(dá)用戶的消息(如錯誤消息和來自print語句的消息)都會發(fā)送到sqlserver錯誤日志。如果身份驗證失敗,則不會觸發(fā)登錄觸發(fā)器。
觸發(fā)器的特性方程?
1,RS觸發(fā)器方程:qn1=sr.QN
用Q表示觸發(fā)器接收到輸入信號前的狀態(tài)稱為當(dāng)前狀態(tài),用Q“表示觸發(fā)器接收到輸入信號后的狀態(tài)稱為二次狀態(tài)。
觸發(fā)器的當(dāng)前狀態(tài)和次要狀態(tài)之間的轉(zhuǎn)換關(guān)系以表的形式記錄,稱為觸發(fā)器的特征表。表中q為“x”,表示觸發(fā)器狀態(tài)無法確定,可以作為簡化中的約束項
2,D觸發(fā)器方程:qn1=D
3。JK觸發(fā)器的特征方程:
當(dāng)J=1,k=0,qn1=1
當(dāng)J=0,k=1,qn1=0;
當(dāng)J=k=0,qn1=QN;
當(dāng)J=k=1,qn1=QN;
4。T觸發(fā)器的特征方程:q=TQ,TQ/
觸發(fā)器的主要優(yōu)點有哪些?
觸發(fā)器具有以下特點:(1)觸發(fā)器有兩種穩(wěn)定狀態(tài),分別代表二進(jìn)制數(shù)0和1或二進(jìn)制信息邏輯0和邏輯1。(2) 在適當(dāng)?shù)挠|發(fā)信號作用下,觸發(fā)器可以從一種穩(wěn)定狀態(tài)轉(zhuǎn)換到另一種穩(wěn)定狀態(tài);當(dāng)觸發(fā)信號消失時,觸發(fā)器可以保持現(xiàn)有狀態(tài)不變。觸發(fā)器的優(yōu)點:觸發(fā)器可以通過數(shù)據(jù)庫中的相關(guān)表級聯(lián)更改;但是級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。觸發(fā)器可以執(zhí)行比用check約束定義的約束更復(fù)雜的約束。與check約束不同,觸發(fā)器可以引用其他表中的列。例如,觸發(fā)器可以使用另一個表中的select來比較插入或更新的數(shù)據(jù),并執(zhí)行其他操作,例如修改數(shù)據(jù)或顯示用戶定義的錯誤消息。觸發(fā)器還可以評估數(shù)據(jù)修改前后表的狀態(tài),并根據(jù)它們的差異采取相應(yīng)的對策。一個表中的多個同類觸發(fā)器(insert、update或delete)允許多個不同的對策響應(yīng)同一個修改語句。約束和觸發(fā)器在特殊情況下有各自的優(yōu)勢。觸發(fā)器的主要優(yōu)點是可以使用transact-SQL代碼包含復(fù)雜的處理邏輯。因此,觸發(fā)器可以支持約束的所有功能;但它并不總是最好的方法。實體完整性應(yīng)該始終由索引在最低級別強制執(zhí)行,這些索引要么是主約束和唯一約束的一部分,要么是獨立于約束創(chuàng)建的。假設(shè)功能滿足應(yīng)用程序的功能要求,域完整性應(yīng)該通過check約束來實現(xiàn),引用完整性(RI)應(yīng)該通過ForeignKey約束來實現(xiàn)。當(dāng)約束支持的功能不能滿足應(yīng)用程序的功能需求時,觸發(fā)器非常有用。