版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年茶葉品牌區(qū)域銷(xiāo)售代理協(xié)議
- 2024秋季農(nóng)產(chǎn)品銷(xiāo)售代理合同
- 2024年度特色車(chē)位買(mǎi)賣(mài)協(xié)議(兒童樂(lè)園配套)3篇
- 《煤礦運(yùn)輸提升系統(tǒng)的安全檢查》培訓(xùn)課件2025
- 2024政府采購(gòu)保密協(xié)議范本(體育場(chǎng)館建設(shè))3篇
- 2024新校區(qū)建設(shè)項(xiàng)目沉降數(shù)據(jù)收集與分析及基礎(chǔ)施工合同3篇
- 2024無(wú)線網(wǎng)絡(luò)覆蓋系統(tǒng)弱電裝修合同
- 2024政工程有限公承建的綠色環(huán)保智慧校園合同3篇
- 2024年精裝室內(nèi)實(shí)木門(mén)采購(gòu)合同版
- 2024手繪墻繪藝術(shù)裝置設(shè)計(jì)與制作合同3篇
- 反恐應(yīng)急預(yù)案3篇
- 2025年中國(guó)社會(huì)科學(xué)院外國(guó)文學(xué)研究所專(zhuān)業(yè)技術(shù)人員招聘3人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 微更新視角下老舊社區(qū)公共空間適老化設(shè)計(jì)策略研究
- 《高血壓治療新進(jìn)展》課件
- 小紅書(shū)營(yíng)銷(xiāo)師(初級(jí))認(rèn)證理論知識(shí)考試題及答案
- 貴州省部分學(xué)校2024-2025學(xué)年高三年級(jí)上冊(cè)10月聯(lián)考 化學(xué)試卷
- 期末綜合試卷(試題)2024-2025學(xué)年人教版數(shù)學(xué)五年級(jí)上冊(cè)(含答案)
- 2023-2024學(xué)年貴州省貴陽(yáng)外國(guó)語(yǔ)實(shí)驗(yàn)中學(xué)八年級(jí)(上)期末數(shù)學(xué)試卷(含答案)
- 2024ESC心房顫動(dòng)管理指南解讀-第一部分
- 人力資源外包投標(biāo)方案
- 第二章藥物設(shè)計(jì)原理和方法
評(píng)論
0/150
提交評(píng)論