關(guān)系數(shù)據(jù)庫(kù)基礎(chǔ)觸發(fā)器_第1頁(yè)
關(guān)系數(shù)據(jù)庫(kù)基礎(chǔ)觸發(fā)器_第2頁(yè)
關(guān)系數(shù)據(jù)庫(kù)基礎(chǔ)觸發(fā)器_第3頁(yè)
關(guān)系數(shù)據(jù)庫(kù)基礎(chǔ)觸發(fā)器_第4頁(yè)
關(guān)系數(shù)據(jù)庫(kù)基礎(chǔ)觸發(fā)器_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

關(guān)系數(shù)據(jù)庫(kù)基礎(chǔ)觸發(fā)器第一頁(yè),共二十四頁(yè),編輯于2023年,星期日主要內(nèi)容

明確了觸發(fā)器的基本概念、用途,類(lèi)型以及工作原理了解DML觸發(fā)器DDL觸發(fā)器的使用

第二頁(yè),共二十四頁(yè),編輯于2023年,星期日7.1觸發(fā)器簡(jiǎn)介

7.1.1觸發(fā)器概念觸發(fā)器是在對(duì)表進(jìn)行插入(INSERT)、更新(UPDATE)或刪除(DELETE)操作時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過(guò)程,它是一種特殊類(lèi)型的存儲(chǔ)過(guò)程。觸發(fā)器這種特殊類(lèi)型的存儲(chǔ)過(guò)程,是在基表被修改時(shí)自動(dòng)執(zhí)行的內(nèi)嵌過(guò)程。觸發(fā)器是獨(dú)立存儲(chǔ)在數(shù)據(jù)庫(kù)中的獨(dú)立對(duì)象。觸發(fā)器是現(xiàn)代數(shù)據(jù)庫(kù)管理系統(tǒng)用于響應(yīng)數(shù)據(jù)變化的一種機(jī)制。觸發(fā)器是實(shí)現(xiàn)數(shù)據(jù)維護(hù)規(guī)則的有效機(jī)制。第三頁(yè),共二十四頁(yè),編輯于2023年,星期日7.1.2觸發(fā)器用途

觸發(fā)器的用途有:比較不同版本的數(shù)據(jù)。讀取其他數(shù)據(jù)庫(kù)的表中的數(shù)據(jù)。在數(shù)據(jù)庫(kù)中所有的相關(guān)表中級(jí)聯(lián)所作的修改或刪除?;貪L無(wú)效的修改。強(qiáng)制實(shí)現(xiàn)比由CHECK約束提供的限制更為復(fù)雜的限制。執(zhí)行本地和遠(yuǎn)程存儲(chǔ)過(guò)程。第四頁(yè),共二十四頁(yè),編輯于2023年,星期日7.1.3觸發(fā)器類(lèi)型在SQLSERVER2005中,觸發(fā)器分為兩大類(lèi):

DML觸發(fā)器:DML觸發(fā)器是當(dāng)數(shù)據(jù)庫(kù)服務(wù)器中發(fā)生數(shù)據(jù)操作語(yǔ)言事件時(shí)執(zhí)行的存儲(chǔ)過(guò)程。DML觸發(fā)器又分為兩大類(lèi):AFTER觸發(fā)器和INSTEADOF觸發(fā)器。

DDL觸發(fā)器:DDL觸發(fā)器是在響應(yīng)數(shù)據(jù)定義語(yǔ)言事件時(shí)執(zhí)行的存儲(chǔ)過(guò)程。第五頁(yè),共二十四頁(yè),編輯于2023年,星期日7.1.4觸發(fā)器工作原理在SQLSERVER2005中三種類(lèi)型的“動(dòng)作”可以激活DML觸發(fā)器,即INSERT、DELETE以及UPDATE。

After觸發(fā)器在操作完成后再被激活執(zhí)行觸發(fā)器里的SQL語(yǔ)句

InsteadOf觸發(fā)器是在對(duì)記錄的操作進(jìn)行之前就被激活,執(zhí)行觸發(fā)器中的SQL語(yǔ)句,而不再執(zhí)行原來(lái)的SQL操作

DDL觸發(fā)器是在響應(yīng)數(shù)據(jù)定義語(yǔ)言(DDL)語(yǔ)句時(shí)觸發(fā),一般用于在數(shù)據(jù)庫(kù)中執(zhí)行管理任務(wù)。第六頁(yè),共二十四頁(yè),編輯于2023年,星期日

7.2DML觸發(fā)器的使用DML觸發(fā)器是由DML語(yǔ)句觸發(fā)的。DML觸發(fā)器的基本要點(diǎn):觸發(fā)時(shí)機(jī):指定觸發(fā)器的出發(fā)時(shí)間。觸發(fā)事件:引起觸發(fā)器被觸發(fā)的事件。條件謂詞:當(dāng)觸發(fā)器中包含多個(gè)觸發(fā)事件的組合時(shí),為了分別針對(duì)不同的事件進(jìn)行不同的處理,需要使用Oracle提供的條件謂詞。INSERTING當(dāng)觸發(fā)事件是INSERT時(shí),為真。UPDATING[(COLUMN—X)]:當(dāng)觸發(fā)事件是UPDATE時(shí),如果修改了column_x列,為真。DELETING:當(dāng)觸發(fā)時(shí)間是DELETE時(shí),取值為真。第七頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.1After觸發(fā)器工作原理AFTER觸發(fā)器是這記錄改變完之后,才會(huì)被激活執(zhí)行,且只能在表上定義。它主要用于記錄變更后的處理或檢查,一旦發(fā)現(xiàn)錯(cuò)誤可用RollbackTransaction語(yǔ)句回滾本次操作。當(dāng)使用AfterTable修改一個(gè)表的結(jié)構(gòu)以后,會(huì)使該表上的觸發(fā)器變得無(wú)效。要使觸發(fā)器重新發(fā)揮作用,就需要重新編譯各個(gè)觸發(fā)器。After觸發(fā)器觸發(fā)器只能建在數(shù)據(jù)表上。第八頁(yè),共二十四頁(yè),編輯于2023年,星期日

7.2.2InsteadOf觸發(fā)器工作原理InsteadOf觸發(fā)器用于取代原來(lái)的操作,在記錄變更之前發(fā)生,它并不去執(zhí)行原來(lái)的插入、更新、刪除操作,而去執(zhí)行觸發(fā)器本身所定義的操作。InsteadOf觸發(fā)器是定義在復(fù)雜視圖上的觸發(fā)器。第九頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.3DML觸發(fā)器注意事項(xiàng)注意事項(xiàng)如下:After觸發(fā)器只能用于數(shù)據(jù)表中,InsteadOf觸發(fā)器可以用于數(shù)據(jù)表中和視圖中,但兩種觸發(fā)器都不可以建立在臨時(shí)表上。一個(gè)數(shù)據(jù)表可以有多個(gè)觸發(fā)器,但一個(gè)觸發(fā)器只能對(duì)應(yīng)一個(gè)表。在同一個(gè)數(shù)據(jù)表中,對(duì)每個(gè)操作而言可以建立許多個(gè)After觸發(fā)器,但I(xiàn)nsteadOf觸發(fā)器針對(duì)每個(gè)操作只能建立一個(gè)。如果針對(duì)某個(gè)操作既設(shè)置了After觸發(fā)器又設(shè)置了InsteadOf觸發(fā)器,則InsteadOf觸發(fā)器一定會(huì)被激活,After觸發(fā)器就不一定了。第十頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.4設(shè)計(jì)After觸發(fā)器Create

TRIGGER

trigger_name

ON

{

table

|

view

}

[

WITH

ENCRYPTION

]

{{

{FOR|AFTER|INSTEAD

OF

}

{

[Delete]

[,][

Insert

]

[

,

]

[

Update

]

}[

WITH

APPEND

]

[

NOT

FOR

REPLICATION

]

AS

[

{

IF

Update

(

column

)

[

{

AND

|

or

}

Update

(

column

)

]

[

...n

]

|

IF

(

COLUMNS_UpdateD

(

)

{

bitwise_operator

}

updated_bitmask

)

{

comparison_operator

}

column_bitmask

[

...n

]

}

]

sql_statement

[

...n

]

}

}

第十一頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.4設(shè)計(jì)After觸發(fā)器參數(shù)trigger_name:是觸發(fā)器的名稱(chēng)。Table

|

view:是在其上執(zhí)行觸發(fā)器的表或視圖,有時(shí)稱(chēng)為觸發(fā)器表或觸發(fā)器視圖。WITH

ENCRYPTION加密

:syscomments

表中包含

Create

TRIGGER

語(yǔ)句文本的條目。AFTER:指定觸發(fā)器只有在觸發(fā)

SQL

語(yǔ)句中指定的所有操作都已成功執(zhí)行后才激發(fā)。INSTEAD

OF:指定執(zhí)行觸發(fā)器而不是執(zhí)行觸發(fā)

SQL

語(yǔ)句,從而替代觸發(fā)語(yǔ)句的操作。第十二頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.4設(shè)計(jì)After觸發(fā)器{

[Delete]

[,]

[Insert]

[,]

[Update]

}:是指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語(yǔ)句時(shí)將激活觸發(fā)器的關(guān)鍵字。WITH

APPEND:指定應(yīng)該添加現(xiàn)有類(lèi)型的其它觸發(fā)器。NOT

FOR

REPLICATION:表示當(dāng)復(fù)制進(jìn)程更改觸發(fā)器所涉及的表時(shí),不應(yīng)執(zhí)行該觸發(fā)器。

AS:是觸發(fā)器要執(zhí)行的操作。sql_statement:是觸發(fā)器的條件和操作。觸發(fā)器條件指定其它準(zhǔn)則,以確定

Delete、Insert

Update

語(yǔ)句是否導(dǎo)致執(zhí)行觸發(fā)器操作。第十三頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.5設(shè)計(jì)InsteadOf觸發(fā)器InsteadOf觸發(fā)器在工作時(shí),SQLServer服務(wù)器接到執(zhí)行SQL語(yǔ)句請(qǐng)求以后,先建立臨時(shí)的INSERT表和DELETE表,然后就激發(fā)InsteadOf觸發(fā)器,至于那個(gè)SQL語(yǔ)句是如何執(zhí)行就不管了。把執(zhí)行權(quán)交給了InsteadOf觸發(fā)器,由它完成之后的操作。第十四頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.6修改DML觸發(fā)器使用SQLServerManagementStudio修改觸發(fā)器內(nèi)容2.使用Transact-SQL語(yǔ)句修改觸發(fā)器內(nèi)容可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_rename命令修改觸發(fā)器的名字。其語(yǔ)法格式為:Sp_renameoldname,,newname例如修改前面創(chuàng)建的學(xué)生_INSERT觸發(fā)器的名稱(chēng)為學(xué)生2_INSERT的語(yǔ)句為:Sp_rename學(xué)生_INSERT,學(xué)生2_INSERT第十五頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.7刪除DML觸發(fā)器使用ServerManagementStudio刪除觸發(fā)器1)在ServerManagementStudio中展開(kāi)指定的服務(wù)器和數(shù)據(jù)庫(kù),這里選中【教務(wù)管理】數(shù)據(jù)庫(kù)。2)選擇要?jiǎng)?chuàng)建觸發(fā)器的表(如選擇“學(xué)生”表),展開(kāi)數(shù)據(jù)表,雙擊數(shù)據(jù)表結(jié)點(diǎn)下的【觸發(fā)器】項(xiàng),可以查看到已經(jīng)存在的觸發(fā)器3)在要進(jìn)行刪除的觸發(fā)器上右擊,在彈出的快捷菜單中選擇【刪除】命令。4)在彈出的刪除對(duì)象對(duì)話框中顯示了當(dāng)前要?jiǎng)h除的觸發(fā)器相關(guān)信息,如果確認(rèn)刪除,則單擊確定按鈕,系統(tǒng)將刪除觸發(fā)器。第十六頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.7刪除DML觸發(fā)器2.使用系統(tǒng)存儲(chǔ)命令刪除觸發(fā)器用系統(tǒng)命令DROPTRIGGER刪除指定的觸發(fā)器,其語(yǔ)法形式如下:DROPTRIGGERTriggername例如刪除觸發(fā)器學(xué)生_INSERT的命令為:DROPTRIGGER學(xué)生_INSERT第十七頁(yè),共二十四頁(yè),編輯于2023年,星期日7.2.8禁用與啟動(dòng)DML觸發(fā)器禁用觸發(fā)器與刪除觸發(fā)器不同,禁用觸發(fā)器時(shí),仍會(huì)為數(shù)據(jù)表定義該觸發(fā)器,只是在執(zhí)行Delete語(yǔ)句、Insert語(yǔ)句或

Update

語(yǔ)句,除非重新啟動(dòng)觸發(fā)器,否則不會(huì)執(zhí)行觸發(fā)器中的操作。在ServerManagementStudio中禁用與啟動(dòng)觸發(fā)器,也不需要先查到觸發(fā)器列表。在觸發(fā)器列表里,右擊其中一個(gè)觸發(fā)器,在彈出的快捷菜單中選擇【禁用】選項(xiàng),即可禁用該觸發(fā)器。第十八頁(yè),共二十四頁(yè),編輯于2023年,星期日7.3DDL觸發(fā)器7.3.1DDL觸發(fā)器簡(jiǎn)介DDL觸發(fā)器是SQLServer2005新增的一種特殊的觸發(fā)器,它在響應(yīng)數(shù)據(jù)定義語(yǔ)言(DDL)語(yǔ)句時(shí)觸發(fā)。一般有以下幾種情況可以使用DDL觸發(fā)器:數(shù)據(jù)庫(kù)里的庫(kù)架構(gòu)或數(shù)據(jù)表結(jié)構(gòu)很重要,不允許被修改。防止數(shù)據(jù)庫(kù)或數(shù)據(jù)表被誤操作刪除。在修改某個(gè)數(shù)據(jù)表結(jié)構(gòu)的同時(shí)在修改另一個(gè)數(shù)據(jù)表的結(jié)構(gòu)。要記錄對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)操作的事件。第十九頁(yè),共二十四頁(yè),編輯于2023年,星期日7.3.2設(shè)計(jì)DDL觸發(fā)器建立DDL觸發(fā)器的語(yǔ)法代碼如下:CREATETRIGGERtrigger_nameON{ALLSERVER|DATABASE}[WITH<ddl_trigger_option>[,...n]]{FOR|AFTER}{event_type|event_group}[,...n]AS{sql_statement[;][...n]|EXTERNALNAME<methodspecifier>[;]}<ddl_trigger_option>::=[ENCRYPTION][EXECUTEASClause]<method_specifier>::=assembly_name.class_name.method_name第二十頁(yè),共二十四頁(yè),編輯于2023年,星期日7.3.2設(shè)計(jì)DDL觸發(fā)器trigger_name:觸發(fā)器的名稱(chēng)。每個(gè)trigger_name必須遵循標(biāo)識(shí)符規(guī)則,但trigger_name不能以#或##開(kāi)頭。ALLSERVER:將DDL觸發(fā)器的作用域應(yīng)用于當(dāng)前服務(wù)器。如果指定了此參數(shù),則只要當(dāng)前服務(wù)器中的任何位置上出現(xiàn)event_type或event_group,就會(huì)激發(fā)該觸發(fā)器。DATABASE:將DDL觸發(fā)器的作用域應(yīng)用于當(dāng)前數(shù)據(jù)庫(kù)。如果指定了此參數(shù),則只要當(dāng)前數(shù)據(jù)庫(kù)中出現(xiàn)event_type或event_group,就會(huì)激發(fā)該觸發(fā)器WITHENCRYPTION:對(duì)CREATETRIGGER語(yǔ)句的文本進(jìn)行加密。使用WITHENCRYPTION可以防止將觸發(fā)器作為SQLServer復(fù)制的一部分進(jìn)行發(fā)布。不能為CLR觸發(fā)器指定WITHENCRYPTION。

第二十一頁(yè),共二十四頁(yè),編輯于2023年,星期日EXECUTEAS:指定用于執(zhí)行該觸發(fā)器的安全上下文。允許您控制SQLServer實(shí)例用于驗(yàn)證被觸發(fā)器引用的任意數(shù)據(jù)庫(kù)對(duì)象的權(quán)限的用戶(hù)帳戶(hù)。event_type:執(zhí)行之后將導(dǎo)致激發(fā)DDL觸發(fā)器的Transact-SQL語(yǔ)言事件的名稱(chēng)。用于激發(fā)DDL觸發(fā)器的DDL事件中列出了在DDL觸發(fā)器中可用的事件。event_group:預(yù)定義的Transact-SQL語(yǔ)言事件分組的名稱(chēng)。執(zhí)行任何屬于event_group的Trans

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論