版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)庫基礎(chǔ)與應(yīng)用第10章 觸發(fā)器的創(chuàng)建和使用,2020/12/7,相關(guān)知識(shí)回顧,1、什么是存儲(chǔ)過程? 2、創(chuàng)建存儲(chǔ)過程的基本語法如何? 3、如何調(diào)用存儲(chǔ)過程? 4、數(shù)據(jù)庫中有哪6種約束?,2020/12/7,觸發(fā)器與存儲(chǔ)過程、約束的關(guān)系,觸發(fā)器是建立在表上的特殊的存儲(chǔ)過程。 當(dāng)對(duì)表進(jìn)行插入、刪除、更新操作時(shí),觸發(fā)器將會(huì)自動(dòng)執(zhí)行。 利用觸發(fā)器可以保證表中數(shù)據(jù)的一致性和完整性,功能比約束更強(qiáng)。,2020/12/7,本章學(xué)習(xí)目標(biāo),了解觸發(fā)器的概念和優(yōu)點(diǎn) 理解觸發(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 綜合實(shí)例 10.5 上機(jī)實(shí)訓(xùn) 本章小結(jié),2020/12/7,10.1 概述,觸發(fā)器是一種特殊類型的存儲(chǔ)過程,它是與特定的表相關(guān)聯(lián)的。 當(dāng)使用UPDATE、INSERT或DELETE中的一種或多種操作在指定表中對(duì)數(shù)據(jù)進(jìn)行修改時(shí),觸發(fā)器會(huì)生效并自動(dòng)執(zhí)行。 一個(gè)表可以有多個(gè)觸發(fā)器。,2020/12/7,觸發(fā)器的主要功能:,使用觸發(fā)器有助于強(qiáng)制保持?jǐn)?shù)據(jù)庫的數(shù)據(jù)完整性。例如,在觸發(fā)器中可以完成如下功能: 不允許刪除或更新特定的記錄。 不允許插入不符合邏輯關(guān)系的記錄。 在刪除一條記錄的同時(shí)刪除
3、其他表中與其相關(guān)的記錄。 在修改一條記錄的同時(shí)修改其他表中與其相關(guān)的記錄。,2020/12/7,觸發(fā)器的主要優(yōu)點(diǎn):,觸發(fā)器是自動(dòng)執(zhí)行的,不需要管理員手動(dòng)維護(hù)數(shù)據(jù)庫的數(shù)據(jù)完整性。 觸發(fā)器可以對(duì)數(shù)據(jù)庫中的相關(guān)表進(jìn)行級(jí)聯(lián)更改。例如,可以在 “院系”表中定義觸發(fā)器,當(dāng)用戶刪除表“院系”中的記錄時(shí),觸發(fā)器將刪除 “學(xué)生”表和“教師”表中對(duì)應(yīng)院系的記錄。 觸發(fā)器可以限制向表中插入無效的數(shù)據(jù),與CHECK約束的功能相似。但在CHECK約束中不能使用到其他表中的字段,而在觸發(fā)器中則沒有此限制。,2020/12/7,思考?,觸發(fā)器如何保證數(shù)據(jù)的完整性和一致性? 觸發(fā)器有哪些類型? 如何創(chuàng)建觸發(fā)器? 觸發(fā)器是怎么
4、自動(dòng)執(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)計(jì)表N(Dnum,Num,Man,Woman) 課程平均成績(jī)CPJ(Cnum,Cname,Pjcj),2020/12/7,項(xiàng)目:學(xué)籍管理系統(tǒng),任務(wù)1:新生入學(xué)
5、時(shí),如何自動(dòng)調(diào)整表n中相應(yīng)系部的數(shù)據(jù)。 任務(wù)2:有學(xué)生退學(xué)時(shí),如何自動(dòng)調(diào)整表n中相應(yīng)系部的數(shù)據(jù)。 任務(wù)3:學(xué)生轉(zhuǎn)系時(shí),如何自動(dòng)調(diào)整表n中相應(yīng)班級(jí)的數(shù)據(jù)。 任務(wù)4:學(xué)生選修某門課程取得成績(jī)后,如何自動(dòng)更新該課程的平均成績(jī); 任務(wù)5:發(fā)現(xiàn)某學(xué)生登記的成績(jī)有誤,進(jìn)行更正后,如何自動(dòng)調(diào)整該課程的平均成績(jī); 任務(wù)6:某個(gè)系不存在了,要?jiǎng)h除D表中相應(yīng)記錄該如何進(jìn)行?,2020/12/7,理解觸發(fā)器的類型,(1)對(duì)應(yīng)數(shù)據(jù)操作的三種類型:INSERT、DELETE和UPDATE,分別有三種不同類型的觸發(fā)器,在執(zhí)行相應(yīng)的操作時(shí)自動(dòng)觸發(fā)。一個(gè)表可以同時(shí)有多個(gè)觸發(fā)器,這些觸發(fā)器可以是不同類型,也可以是同一類型的。,
6、上述6個(gè)任務(wù)所需要的觸發(fā)器分別屬于哪種?,2020/12/7,(2)從執(zhí)行時(shí)間來看,SQL SERVER有兩類觸發(fā)器: AFTER觸發(fā)器: 觸發(fā)器在觸發(fā)它們的操作完成后執(zhí)行。一張表中可以為每個(gè)觸發(fā)操作(INSERT、DELETE和UPDATE)創(chuàng)建多個(gè)AFTER觸發(fā)器。 INSTEAD OF觸發(fā)器: 該觸發(fā)器代替觸發(fā)操作執(zhí)行,原來的操作不再執(zhí)行。一個(gè)表只能創(chuàng)建一個(gè)INSTEAD OF觸發(fā)器。,上述6個(gè)任務(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)建一個(gè)INSERT 觸發(fā)器,實(shí)現(xiàn)當(dāng)表s插入一個(gè)學(xué)生時(shí),自動(dòng)調(diào)整表n中相應(yīng)系部的統(tǒng)計(jì)數(shù)據(jù),即實(shí)現(xiàn)表s插入數(shù)據(jù)時(shí)與表n間數(shù)據(jù)的一致性。 方法一:用SQL語句實(shí)現(xiàn) 方法二:用企業(yè)管理器實(shí)現(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é)生對(duì)應(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)計(jì)信息 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,如何驗(yàn)證觸發(fā)器是否正常工作?,課堂練習(xí): 1、利用SQL語句在S表上創(chuàng)建觸發(fā)器(例1.txt); 2、觀察N表中的統(tǒng)計(jì)數(shù)據(jù)并進(jìn)行記錄; 3、利用企業(yè)管理器在S表中插入一條記錄; 4、觀察N表中的統(tǒng)計(jì)數(shù)據(jù)是否自動(dòng)發(fā)生變化;,2020/12/7,任務(wù)2 創(chuàng)建Delete觸發(fā)器,例2 在表s上創(chuàng)建一個(gè)DELETE 觸發(fā)器,實(shí)現(xiàn)當(dāng)表s刪除一個(gè)學(xué)生時(shí),自動(dòng)
10、調(diào)整表n中相應(yīng)系部的數(shù)據(jù),即實(shí)現(xiàn)表s刪除數(shù)據(jù)時(shí)與表n間數(shù)據(jù)的一致性。 方法一:用SQL語句實(shí)現(xiàn) 方法二:用企業(yè)管理器實(shí)現(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ā)器:對(duì)表插入(刪除)記錄時(shí),觸發(fā)器被自動(dòng)執(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)建一個(gè)UPDATE觸發(fā)器,實(shí)現(xiàn)當(dāng)表s修改一個(gè)學(xué)生信息時(shí),自動(dòng)調(diào)整表n中相應(yīng)班級(jí)的數(shù)據(jù),即實(shí)現(xiàn)表s修改數(shù)據(jù)時(shí)與表n間數(shù)據(jù)的一致性。 方法一:用SQL語句實(shí)現(xiàn) 方法二:用企業(yè)管理器實(shí)現(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ā)器實(shí)現(xiàn)以下功能,任務(wù)4:學(xué)生選修某門課程取得成績(jī)后,如何自動(dòng)更新該課程的平均成績(jī); 任務(wù)5:發(fā)現(xiàn)某學(xué)生登記的成績(jī)有誤,進(jìn)行更正后,如何自動(dòng)調(diào)整該課程的平均成績(jī); 任務(wù)6:某個(gè)系不存在了,要?jiǎng)h除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)存儲(chǔ)過程查看觸發(fā)器。 有4個(gè)系統(tǒng)存儲(chǔ)過
13、程,可以顯示有關(guān)觸發(fā)器的信息: sp_help 觸發(fā)器名: 顯示觸發(fā)器的所有者和創(chuàng)建時(shí)間 sp_helptext 觸發(fā)器名:顯示觸發(fā)器的源代碼 sp_helptrigger 表名:顯示某個(gè)表定義的觸發(fā)器清單 sp_depends 觸發(fā)器名:顯示該觸發(fā)器引用的對(duì)象清單,2020/12/7,10.3.2 修改觸發(fā)器,觸發(fā)器建立后可對(duì)其進(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)不再需要某個(gè)觸發(fā)器時(shí),可將其刪除??梢酝ㄟ^除去觸發(fā)器或除去觸發(fā)器表刪除觸發(fā)器。除去表時(shí),也將除去所有與表關(guān)聯(lián)的觸發(fā)器。 (1)使用T-SQL刪除觸發(fā)器,語法格式如下: 語法格式: DROP TRIGGER 觸發(fā)器名 ,.n ,2020/12/7,(2)使用企業(yè)管理器刪除觸發(fā)器 在圖所示的“觸發(fā)器屬性”對(duì)話框的“名稱”下拉菜單中選擇要?jiǎng)h除的觸發(fā)器名稱(默認(rèn)是“觸發(fā)器”),然后單擊【刪除】
15、按鈕并確認(rèn)。,2020/12/7,10.4 綜合實(shí)例,數(shù)據(jù)庫管理信息系統(tǒng)中,常常需要監(jiān)控敏感數(shù)據(jù)的更改(如用戶的計(jì)費(fèi)信息、員工的工資信息等),可使用觸發(fā)器實(shí)現(xiàn)詳細(xì)、細(xì)致的日志記錄。,2020/12/7,【例10-9】用戶信息表Users中包含敏感的用戶積分和用戶等級(jí)信息,現(xiàn)在需要對(duì)其進(jìn)行監(jiān)控,如果更改了用戶積分和用戶等級(jí),則需要生成審計(jì)記錄并插入到審核表,記錄更新前后的數(shù)據(jù),并記錄修改者的登錄名和客戶機(jī)名,以及修改時(shí)間。 【分析】: (1)產(chǎn)生跟蹤敏感信息的審核表 (2)用戶信息表Users上創(chuàng)建UPDATE觸發(fā)器 (3)判斷是否修改用戶積分和用戶等級(jí),是則執(zhí)行觸發(fā)器內(nèi)容;否則不做任何處理。
16、(4)從deleted臨時(shí)表中獲取修改前的數(shù)據(jù),插入審核表。 (5)從inserted臨時(shí)表中獲取修改后的數(shù)據(jù),插入審核表。 (6)使用 SUSER_SNAME()返回登錄名。 (7)使用 HOST_NAME()返回工作站名稱。 (8)使用 GETDATE() 返回修改時(shí)間。,2020/12/7,代碼如下: (1)產(chǎn)生跟蹤敏感信息的審核表 CREATE TABLE auditUsers( audit_Id int identity(1,1) primary key, -審計(jì)編號(hào),標(biāo)識(shí)列 -審計(jì)數(shù)據(jù)類型:OLD為修改前數(shù)據(jù),NEW為修改后數(shù)據(jù) Auit_Type char(3)not null,
17、 Uidint not null, -記錄修改的用戶號(hào) Upoint int null, -記錄用戶積分 UState int null, -記錄用戶等級(jí) audit_user varchar(40) default SUSER_SNAME(),-記錄修改者的登錄號(hào) audit_pc varchar(40) default HOST_NAME(), -記錄修改者的客戶機(jī)名 audit_time datetime default GETDATE() -記錄修改發(fā)生時(shí)間 ),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)驗(yàn)證此觸發(fā)器,修改第2號(hào)用戶的積分為20。 update Users set Upoint=20 where UID=2 (4)查看審計(jì)表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《撐起自我保護(hù)傘》課件
- 家庭假期安全教育的實(shí)施步驟與流程
- 《收入中財(cái)大》課件
- 2025江西省商品的銷售合同
- 2024年江蘇省徐州市中考英語真題卷及答案解析
- 智能家居模板施工勞務(wù)合同
- 石油化工防病毒生產(chǎn)安全
- 招投標(biāo)投標(biāo)保證金管理講座
- 健身器材公司租賃合同
- 船舶維修起重機(jī)操作合同
- 電力電子技術(shù)課程設(shè)計(jì)
- 農(nóng)村留守婦女創(chuàng)業(yè)就業(yè)情況調(diào)研報(bào)告
- 匹克球技術(shù)水平分級(jí)指南
- 山東工藝美術(shù)學(xué)院碩士研究生開題報(bào)告記錄表
- 大型電力變壓器安裝監(jiān)理工作要點(diǎn)
- 第三次全國(guó)文物普查建檔備案工作規(guī)范
- 輸變電工程經(jīng)濟(jì)評(píng)價(jià)導(dǎo)則
- 中西方差異之思維方式
- 直流斬波電路的MATLAB建模與仿真畢業(yè)設(shè)計(jì)
- 思想政治工作中人文關(guān)懷、心理疏導(dǎo)方式研究
- 基本開穴方法
評(píng)論
0/150
提交評(píng)論