版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)庫基礎(chǔ)與應(yīng)用第10章 觸發(fā)器的創(chuàng)建和使用,2020/12/7,相關(guān)知識回顧,1、什么是存儲過程? 2、創(chuàng)建存儲過程的基本語法如何? 3、如何調(diào)用存儲過程? 4、數(shù)據(jù)庫中有哪6種約束?,2020/12/7,觸發(fā)器與存儲過程、約束的關(guān)系,觸發(fā)器是建立在表上的特殊的存儲過程。 當(dāng)對表進(jìn)行插入、刪除、更新操作時,觸發(fā)器將會自動執(zhí)行。 利用觸發(fā)器可以保證表中數(shù)據(jù)的一致性和完整性,功能比約束更強。,2020/12/7,本章學(xué)習(xí)目標(biāo),了解觸發(fā)器的概念和優(yōu)點 理解觸發(fā)器的工作原理 熟練掌握如何創(chuàng)建INSERT觸發(fā)器、UPDATE觸發(fā)器、DELETE觸發(fā)器 掌握如何查看、修改和刪除觸發(fā)器,2020/12/7
2、,第10章 觸發(fā)器的創(chuàng)建和使用,10.1 概述 10.2 創(chuàng)建觸發(fā)器 10.3 查看、修改和刪除觸發(fā)器 10.4 綜合實例 10.5 上機實訓(xùn) 本章小結(jié),2020/12/7,10.1 概述,觸發(fā)器是一種特殊類型的存儲過程,它是與特定的表相關(guān)聯(lián)的。 當(dāng)使用UPDATE、INSERT或DELETE中的一種或多種操作在指定表中對數(shù)據(jù)進(jìn)行修改時,觸發(fā)器會生效并自動執(zhí)行。 一個表可以有多個觸發(fā)器。,2020/12/7,觸發(fā)器的主要功能:,使用觸發(fā)器有助于強制保持?jǐn)?shù)據(jù)庫的數(shù)據(jù)完整性。例如,在觸發(fā)器中可以完成如下功能: 不允許刪除或更新特定的記錄。 不允許插入不符合邏輯關(guān)系的記錄。 在刪除一條記錄的同時刪除
3、其他表中與其相關(guān)的記錄。 在修改一條記錄的同時修改其他表中與其相關(guān)的記錄。,2020/12/7,觸發(fā)器的主要優(yōu)點:,觸發(fā)器是自動執(zhí)行的,不需要管理員手動維護數(shù)據(jù)庫的數(shù)據(jù)完整性。 觸發(fā)器可以對數(shù)據(jù)庫中的相關(guān)表進(jìn)行級聯(lián)更改。例如,可以在 “院系”表中定義觸發(fā)器,當(dāng)用戶刪除表“院系”中的記錄時,觸發(fā)器將刪除 “學(xué)生”表和“教師”表中對應(yīng)院系的記錄。 觸發(fā)器可以限制向表中插入無效的數(shù)據(jù),與CHECK約束的功能相似。但在CHECK約束中不能使用到其他表中的字段,而在觸發(fā)器中則沒有此限制。,2020/12/7,思考?,觸發(fā)器如何保證數(shù)據(jù)的完整性和一致性? 觸發(fā)器有哪些類型? 如何創(chuàng)建觸發(fā)器? 觸發(fā)器是怎么
4、自動執(zhí)行的?,2020/12/7,示例數(shù)據(jù)庫Student的結(jié)構(gòu),學(xué)生表S(Snum,Sname,Ssex,Sage,Sphone,Dnum) 教師表T(Tnum,Tname,Tsex,Tbirth,Ttitle,Tsalary,Tphone,Dnum) 院系表D(Dnum,Dname,Ddirector) 課程表C(Cnum,Cname,Cfreq) 選課表SC(Snum,Cnum,Score) 授課表TC(Tnum,Cnum) 學(xué)生統(tǒng)計表N(Dnum,Num,Man,Woman) 課程平均成績CPJ(Cnum,Cname,Pjcj),2020/12/7,項目:學(xué)籍管理系統(tǒng),任務(wù)1:新生入學(xué)
5、時,如何自動調(diào)整表n中相應(yīng)系部的數(shù)據(jù)。 任務(wù)2:有學(xué)生退學(xué)時,如何自動調(diào)整表n中相應(yīng)系部的數(shù)據(jù)。 任務(wù)3:學(xué)生轉(zhuǎn)系時,如何自動調(diào)整表n中相應(yīng)班級的數(shù)據(jù)。 任務(wù)4:學(xué)生選修某門課程取得成績后,如何自動更新該課程的平均成績; 任務(wù)5:發(fā)現(xiàn)某學(xué)生登記的成績有誤,進(jìn)行更正后,如何自動調(diào)整該課程的平均成績; 任務(wù)6:某個系不存在了,要刪除D表中相應(yīng)記錄該如何進(jìn)行?,2020/12/7,理解觸發(fā)器的類型,(1)對應(yīng)數(shù)據(jù)操作的三種類型:INSERT、DELETE和UPDATE,分別有三種不同類型的觸發(fā)器,在執(zhí)行相應(yīng)的操作時自動觸發(fā)。一個表可以同時有多個觸發(fā)器,這些觸發(fā)器可以是不同類型,也可以是同一類型的。,
6、上述6個任務(wù)所需要的觸發(fā)器分別屬于哪種?,2020/12/7,(2)從執(zhí)行時間來看,SQL SERVER有兩類觸發(fā)器: AFTER觸發(fā)器: 觸發(fā)器在觸發(fā)它們的操作完成后執(zhí)行。一張表中可以為每個觸發(fā)操作(INSERT、DELETE和UPDATE)創(chuàng)建多個AFTER觸發(fā)器。 INSTEAD OF觸發(fā)器: 該觸發(fā)器代替觸發(fā)操作執(zhí)行,原來的操作不再執(zhí)行。一個表只能創(chuàng)建一個INSTEAD OF觸發(fā)器。,上述6個任務(wù)所需要的觸發(fā)器分別屬于哪種?,2020/12/7,2020/12/7,10.2 創(chuàng)建觸發(fā)器,創(chuàng)建觸發(fā)器的方法: 1使用Transact-SQL語句創(chuàng)建觸發(fā)器 2使用企業(yè)管理器創(chuàng)建觸發(fā)器,202
7、0/12/7,使用Transact-SQL語句創(chuàng)建觸發(fā)器,CREATE TRIGGER ON FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE AS 注意:默認(rèn)創(chuàng)建的觸發(fā)器是AFTER類型的。,2020/12/7,任務(wù)1 創(chuàng)建insert觸發(fā)器,例1 在表s上創(chuàng)建一個INSERT 觸發(fā)器,實現(xiàn)當(dāng)表s插入一個學(xué)生時,自動調(diào)整表n中相應(yīng)系部的統(tǒng)計數(shù)據(jù),即實現(xiàn)表s插入數(shù)據(jù)時與表n間數(shù)據(jù)的一致性。 方法一:用SQL語句實現(xiàn) 方法二:用企業(yè)管理器實現(xiàn),2020/12/7,方法一:用SQL語句創(chuàng)建觸發(fā)器,CREATE TRIGGER s_insert ON
8、 s FOR INSERT AS begin declare dnum char(20),ssex char(2) -檢索插入的記錄值 select dnum=dnum,ssex=ssex from inserted -如果在N表中不存在該學(xué)生對應(yīng)的系,則在N表中添加該系的信息 if not exists(select dnum from n where dnum=dnum) insert into n(dnum,num) values (dnum,0) -根據(jù)該學(xué)生的性別更新相應(yīng)的統(tǒng)計信息 if ssex=男 update n set num=num+1,man=isnull(man,0)+
9、1 where dnum=dnum else update n set num=num+1,woman=isnull(woman,0)+1 where dnum=dnum end,2020/12/7,方法一:用企業(yè)管理器創(chuàng)建觸發(fā)器,2020/12/7,如何驗證觸發(fā)器是否正常工作?,課堂練習(xí): 1、利用SQL語句在S表上創(chuàng)建觸發(fā)器(例1.txt); 2、觀察N表中的統(tǒng)計數(shù)據(jù)并進(jìn)行記錄; 3、利用企業(yè)管理器在S表中插入一條記錄; 4、觀察N表中的統(tǒng)計數(shù)據(jù)是否自動發(fā)生變化;,2020/12/7,任務(wù)2 創(chuàng)建Delete觸發(fā)器,例2 在表s上創(chuàng)建一個DELETE 觸發(fā)器,實現(xiàn)當(dāng)表s刪除一個學(xué)生時,自動
10、調(diào)整表n中相應(yīng)系部的數(shù)據(jù),即實現(xiàn)表s刪除數(shù)據(jù)時與表n間數(shù)據(jù)的一致性。 方法一:用SQL語句實現(xiàn) 方法二:用企業(yè)管理器實現(xiàn),2020/12/7,提示:,-檢索插入的記錄值 select dnum=dnum,ssex=ssex from inserted -檢索刪除的記錄值 select dnum=dnum,ssex=ssex from deleted,2020/12/7,觸發(fā)器的執(zhí)行原理(P214),insert(delete)觸發(fā)器:對表插入(刪除)記錄時,觸發(fā)器被自動執(zhí)行。首先將插入(刪除)的記錄放入inserted(deleted)表中,該表為一邏輯表(結(jié)構(gòu)與原表相同),保存插入(刪除)的
11、記錄,然后執(zhí)行觸發(fā)器指定的操作。,update:相當(dāng)于先delete,再insert。先將原記錄保存在deleted表中,再將新記錄保存在inserted表中。,2020/12/7,任務(wù)3 創(chuàng)建Update觸發(fā)器,例3 在表s上創(chuàng)建一個UPDATE觸發(fā)器,實現(xiàn)當(dāng)表s修改一個學(xué)生信息時,自動調(diào)整表n中相應(yīng)班級的數(shù)據(jù),即實現(xiàn)表s修改數(shù)據(jù)時與表n間數(shù)據(jù)的一致性。 方法一:用SQL語句實現(xiàn) 方法二:用企業(yè)管理器實現(xiàn),2020/12/7,分析,Update操作相當(dāng)于先Delete,再Insert。 Update觸發(fā)器中定義的SQL語句也應(yīng)該由兩部分所構(gòu)成: (1)Delete觸發(fā)器中定義的語句; (2)
12、Insert觸發(fā)器中定義的語句。,課堂練習(xí):根據(jù)例1和例2,創(chuàng)建Update觸發(fā)器,2020/12/7,課后練習(xí):創(chuàng)建觸發(fā)器實現(xiàn)以下功能,任務(wù)4:學(xué)生選修某門課程取得成績后,如何自動更新該課程的平均成績; 任務(wù)5:發(fā)現(xiàn)某學(xué)生登記的成績有誤,進(jìn)行更正后,如何自動調(diào)整該課程的平均成績; 任務(wù)6:某個系不存在了,要刪除D表中相應(yīng)記錄該如何進(jìn)行?(instead of觸發(fā)器),2020/12/7,10.3 查看、修改和刪除觸發(fā)器,觸發(fā)器建立后,可查看、修改和刪除觸發(fā)器的定義。,2020/12/7,10.3.1 查看觸發(fā)器,可以通過企業(yè)管理器查看觸發(fā)器,也可通過系統(tǒng)存儲過程查看觸發(fā)器。 有4個系統(tǒng)存儲過
13、程,可以顯示有關(guān)觸發(fā)器的信息: sp_help 觸發(fā)器名: 顯示觸發(fā)器的所有者和創(chuàng)建時間 sp_helptext 觸發(fā)器名:顯示觸發(fā)器的源代碼 sp_helptrigger 表名:顯示某個表定義的觸發(fā)器清單 sp_depends 觸發(fā)器名:顯示該觸發(fā)器引用的對象清單,2020/12/7,10.3.2 修改觸發(fā)器,觸發(fā)器建立后可對其進(jìn)行修改,既可修改其名稱,也可以修改其定義、有效性等。 1修改觸發(fā)器名稱 語法格式: sp_rename 觸發(fā)器原名, 觸發(fā)器新名,2020/12/7,2修改觸發(fā)器內(nèi)容 (1)使用T-SQL修改觸發(fā)器內(nèi)容,語法格式如下: 語法格式: Alter TRIGGER ON
14、FOR | AFTER | INSTEAD OF DELETE , INSERT , UPDATE AS ,2020/12/7,(2)使用企業(yè)管理器修改觸發(fā)器內(nèi)容,2020/12/7,10.3.3 刪除觸發(fā)器,當(dāng)不再需要某個觸發(fā)器時,可將其刪除??梢酝ㄟ^除去觸發(fā)器或除去觸發(fā)器表刪除觸發(fā)器。除去表時,也將除去所有與表關(guān)聯(lián)的觸發(fā)器。 (1)使用T-SQL刪除觸發(fā)器,語法格式如下: 語法格式: DROP TRIGGER 觸發(fā)器名 ,.n ,2020/12/7,(2)使用企業(yè)管理器刪除觸發(fā)器 在圖所示的“觸發(fā)器屬性”對話框的“名稱”下拉菜單中選擇要刪除的觸發(fā)器名稱(默認(rèn)是“觸發(fā)器”),然后單擊【刪除】
15、按鈕并確認(rèn)。,2020/12/7,10.4 綜合實例,數(shù)據(jù)庫管理信息系統(tǒng)中,常常需要監(jiān)控敏感數(shù)據(jù)的更改(如用戶的計費信息、員工的工資信息等),可使用觸發(fā)器實現(xiàn)詳細(xì)、細(xì)致的日志記錄。,2020/12/7,【例10-9】用戶信息表Users中包含敏感的用戶積分和用戶等級信息,現(xiàn)在需要對其進(jìn)行監(jiān)控,如果更改了用戶積分和用戶等級,則需要生成審計記錄并插入到審核表,記錄更新前后的數(shù)據(jù),并記錄修改者的登錄名和客戶機名,以及修改時間。 【分析】: (1)產(chǎn)生跟蹤敏感信息的審核表 (2)用戶信息表Users上創(chuàng)建UPDATE觸發(fā)器 (3)判斷是否修改用戶積分和用戶等級,是則執(zhí)行觸發(fā)器內(nèi)容;否則不做任何處理。
16、(4)從deleted臨時表中獲取修改前的數(shù)據(jù),插入審核表。 (5)從inserted臨時表中獲取修改后的數(shù)據(jù),插入審核表。 (6)使用 SUSER_SNAME()返回登錄名。 (7)使用 HOST_NAME()返回工作站名稱。 (8)使用 GETDATE() 返回修改時間。,2020/12/7,代碼如下: (1)產(chǎn)生跟蹤敏感信息的審核表 CREATE TABLE auditUsers( audit_Id int identity(1,1) primary key, -審計編號,標(biāo)識列 -審計數(shù)據(jù)類型:OLD為修改前數(shù)據(jù),NEW為修改后數(shù)據(jù) Auit_Type char(3)not null,
17、 Uidint not null, -記錄修改的用戶號 Upoint int null, -記錄用戶積分 UState int null, -記錄用戶等級 audit_user varchar(40) default SUSER_SNAME(),-記錄修改者的登錄號 audit_pc varchar(40) default HOST_NAME(), -記錄修改者的客戶機名 audit_time datetime default GETDATE() -記錄修改發(fā)生時間 ),2020/12/7,(2)在用戶信息表Users上創(chuàng)建UPDATE觸發(fā)器 CREATE TRIGGER users_Upda
18、te ON USERS FOR UPDATE as if update(Upoint) or update(ustate) begin insert into auditUsers(Auit_Type, Uid, Upoint, UState) SELECT OLD, del. Uid, del.Upoint, del.Ustate FROM DELETED del insert into auditUsers(Auit_Type, Uid, Upoint, UState) SELECT NEW, ins. Uid, ins.Upoint, ins.Ustate FROM INSERTED ins End GO,2020/12/7,(3)驗證此觸發(fā)器,修改第2號用戶的積分為20。 update Users set Upoint=20 where UID=2 (4)查看審計表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 乳品店清潔服務(wù)合同范本
- 倉儲服務(wù)購買合同樣本
- 個人裝修借款合同范本
- 交通運輸混凝土施工承包合同
- 個人信用貸款合同
- 倉儲管理員勞動合同模板
- IT行業(yè)新員工試用期合同模板
- 產(chǎn)品獨家總代理合同
- 代建合同參考模板水利建設(shè)項目
- 二手房產(chǎn)購買補充協(xié)議
- 2024年安全生產(chǎn)月全國安全生產(chǎn)知識競賽題庫及答案(共六套)
- 2024-2025學(xué)年滬教版小學(xué)四年級上學(xué)期期中英語試卷及解答參考
- DB23T 3844-2024煤礦地區(qū)地震(礦震)監(jiān)測臺網(wǎng)技術(shù)要求
- 《阿凡達(dá)》電影賞析
- DB42-T 2286-2024 地鐵冷卻塔衛(wèi)生管理規(guī)范
- 合作伙伴合同協(xié)議書范文5份
- 公安機關(guān)人民警察高級執(zhí)法資格考題及解析
- 浙教版信息科技四年級上冊全冊教學(xué)設(shè)計
- 2024年全國職業(yè)院校技能大賽中職(中式烹飪賽項)考試題庫-下(多選、判斷題)
- 教師節(jié)感恩老師主題班會一朝沐杏雨一生念師恩因為有你未來更加光明課件
- 紅托竹蓀工廠化栽培技術(shù)規(guī)程
評論
0/150
提交評論