



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、觸發(fā)器 P191一、觸發(fā)器概述1是一種特殊的存儲(chǔ)過程。2不能被顯式調(diào)用,只能由一些特定的操作(命令)引發(fā)(激活),這些命令是:INSERT、DELETE、UPDATE、CREATE、ALTER、DROP、GRANT、DENY、REVOKE等。3每個(gè)觸發(fā)器由三部分組成觸發(fā)器名稱:命名規(guī)則與變量名、存儲(chǔ)過程名相同;激活該觸發(fā)器的操作(命令動(dòng)詞)。一個(gè)存儲(chǔ)過程。4使用觸發(fā)器可強(qiáng)制實(shí)現(xiàn)數(shù)據(jù)的一致性和完整性。二、觸發(fā)器的分類(按引發(fā)命令分類) 及其工作原理1DML觸發(fā)器(表級(jí))(1)觸發(fā)器必須依附于某一個(gè)表(觸發(fā)器必須被包含在某一個(gè)表中)。(2)激活該觸發(fā)器的操作:可以是INSERT、DELETE、UP
2、DATE之一。(3)當(dāng)上述操作發(fā)生在包含觸發(fā)器的表上時(shí),觸發(fā)器中的過程被自動(dòng)執(zhí)行。(4)支持兩種類型的觸發(fā)器:AFTER可以為同一表的同一操作定義多個(gè)該類型的觸發(fā)器,并可定義執(zhí)行順序;INSTEAD OF同一表的同一操作只能定義一個(gè)該類型的觸發(fā)器。(5)工作原理 P193臨時(shí)邏輯表INSERTED和DELETED。2DDL觸發(fā)器(數(shù)據(jù)庫(kù)級(jí)和服務(wù)器級(jí))(1)觸發(fā)器必須依附于某一個(gè)數(shù)據(jù)庫(kù)(觸發(fā)器必須被包含在某一個(gè)數(shù)據(jù)庫(kù)中)。(2)激活該觸發(fā)器的操作:可以是CREATE、ALTER、DROP、GRANT、DENY、REVOKE等之一。(3)當(dāng)上述操作發(fā)生在包含觸發(fā)器的數(shù)據(jù)庫(kù)上時(shí),觸發(fā)器中的過程被自動(dòng)
3、執(zhí)行。(4)只有AFTER型觸發(fā)器。三、創(chuàng)建DML觸發(fā)器 P194用命令CREATE TRIGGER創(chuàng)建例:1 CREATE TRIGGER 增加學(xué)生學(xué)分 ON 成績(jī) /只能增加一條記錄FOR INSERTASDECLARE XH CHAR(6),KCH CHAR(8),FS DECIMAL(4,1)SELECT XH=學(xué)號(hào),KCH=課程編號(hào),FS=分?jǐn)?shù) FROM INSERTEDIF FS>=60 UPDATE 學(xué)生 SET 已修學(xué)分=已修學(xué)分+(SELECT 學(xué)分 FROM 課程 WHERE 課程編號(hào)=KCH) WHERE 學(xué)號(hào)=XH2CREATE TRIGGER 減少學(xué)生學(xué)分 ON
4、 成績(jī)FOR DELETEASUPDATE 學(xué)生 SET 已修學(xué)分=已修學(xué)分-(SELECT SUM(學(xué)分) FROM 課程WHERE 課程編號(hào) IN(SELECT DISTINCT 課程編號(hào) FROM DELETEDWHERE 學(xué)生.學(xué)號(hào)=DELETED.學(xué)號(hào) AND 分?jǐn)?shù)>=60) WHERE EXISTS(SELECT DISTINCT 課程編號(hào) FROM DELETEDWHERE 學(xué)生.學(xué)號(hào)=DELETED.學(xué)號(hào) AND 分?jǐn)?shù)>=60)3.CREATE TRIGGER 修改學(xué)生學(xué)分 ON 成績(jī)FOR UPDATEASUPDATE 學(xué)生 SET 已修學(xué)分=已修學(xué)分-(SELE
5、CT SUM(學(xué)分) FROM 課程WHERE 課程編號(hào) IN(SELECT DISTINCT 課程編號(hào) FROM DELETEDWHERE 學(xué)生.學(xué)號(hào)=DELETED.學(xué)號(hào) AND 分?jǐn)?shù)>=60)WHERE EXISTS(SELECT DISTINCT 課程編號(hào) FROM DELETEDWHERE 學(xué)生.學(xué)號(hào)=DELETED.學(xué)號(hào) AND 分?jǐn)?shù)>=60)UPDATE 學(xué)生 SET 已修學(xué)分=已修學(xué)分+(SELECT SUM(學(xué)分) FROM 課程WHERE 課程編號(hào) IN(SELECT DISTINCT 課程編號(hào) FROM INSERTEDWHERE 學(xué)生.學(xué)號(hào)=INSERTED
6、.學(xué)號(hào) AND 分?jǐn)?shù)>=60)WHERE EXISTS(SELECT DISTINCT 課程編號(hào) FROM INSERTEDWHERE 學(xué)生.學(xué)號(hào)=INSERTED.學(xué)號(hào) AND 分?jǐn)?shù)>=60)4.“修改學(xué)生學(xué)分”也可改為:CREATE TRIGGER 修改學(xué)生學(xué)分 ON 成績(jī)FOR UPDATEASUPDATE 學(xué)生 SET 已修學(xué)分=(SELECT SUM(學(xué)分) FROM 課程WHERE 課程編號(hào) IN(SELECT 課程編號(hào) FROM 成績(jī)WHERE 學(xué)生.學(xué)號(hào)=成績(jī).學(xué)號(hào) AND 分?jǐn)?shù)>=60)然后可執(zhí)行下列命令,并檢驗(yàn)執(zhí)行結(jié)果。-INSERT INTO 成績(jī) VA
7、LUES('200202','L2020308',83)-INSERT INTO 成績(jī) VALUES('200202','L2030501',80)-INSERT INTO 成績(jī) VALUES('200202','L2030506',75)-DELETE FROM 成績(jī) WHERE 學(xué)號(hào)='200202' AND LEFT(課程編號(hào),1)='L'-UPDATE 成績(jī) SET 分?jǐn)?shù)=80 WHERE 學(xué)號(hào)='200202' AND LEFT(課程編號(hào),1
8、)='L'四、創(chuàng)建DDL觸發(fā)器 P198例:1. P1992. CREATE TRIGGER 禁刪數(shù)據(jù)庫(kù)ON ALL SERVERFOR DROP_DATABASEASPRINT '請(qǐng)不要?jiǎng)h除數(shù)據(jù)庫(kù)!'ROLLBACK TRANSACTIONDROP DATABASE 訂貨管理五、嵌套觸發(fā)器和遞歸觸發(fā)器 P199, P200六、管理觸發(fā)器 P2011查看2修改3禁用4刪除-根據(jù)成績(jī)表計(jì)算每個(gè)學(xué)生的已修學(xué)分update 學(xué)生set 已修學(xué)分=(select sum(學(xué)分) from 課程where 課程編號(hào)in(select 課程編號(hào)from 成績(jī)where 學(xué)生
9、.學(xué)號(hào)=成績(jī).學(xué)號(hào) and 分?jǐn)?shù)>=60)-修改插入觸發(fā)器,使得向成績(jī)表中插入多條記錄,也能成功執(zhí)行CREATE TRIGGER 插入學(xué)生學(xué)分ON 成績(jī)FOR insertASUPDATE 學(xué)生SET 已修學(xué)分=已修學(xué)分+(SELECT SUM(學(xué)分) FROM 課程WHERE 課程編號(hào)IN(SELECT DISTINCT 課程編號(hào)FROM insertedWHERE 學(xué)生.學(xué)號(hào)=inserted.學(xué)號(hào)AND 分?jǐn)?shù)>=60) WHERE EXISTS(SELECT DISTINCT 課程編號(hào)FROM insertedWHERE 學(xué)生.學(xué)號(hào)=inserted.學(xué)號(hào)AND 分?jǐn)?shù)>
10、=60)select * from 成績(jī)select 學(xué)號(hào),已修學(xué)分from 學(xué)生INSERT INTO 成績(jī)VALUES('200202','L2020308',83)INSERT INTO 成績(jī)VALUES('200202','L2030501',80)INSERT INTO 成績(jī)VALUES('200202','L2030506',75)INSERT INTO 成績(jī)VALUES('200201','L2020308',83)INSERT INTO 成績(jī)VALUES('200201','L2030501',80)INSERT INTO 成績(jī)VALUES('200201','L2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年甘肅張掖市民樂縣前進(jìn)牧業(yè)(德瑞牧場(chǎng))招聘考試筆試試題(含答案)
- 2025年安徽蚌埠市東方投資集團(tuán)有限公司下屬子公司招聘考試筆試試題(含答案)
- 【來賓】2025年廣西來賓市商務(wù)局招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 制作小弓箭教學(xué)課件
- 整車性能檢測(cè)技術(shù)課件
- 整式除法說課課件
- 農(nóng)作物秸稈綜合利用情況調(diào)研報(bào)告
- 敬畏生命小學(xué)班會(huì)課件
- 敬業(yè)與樂業(yè)小學(xué)生課件
- 意外險(xiǎn)理賠調(diào)查實(shí)務(wù)及典型案例分析
- 空調(diào)設(shè)備吊裝與安裝方案
- 2024年寧夏中考生物真題卷及答案解析
- 光纖通信系統(tǒng)(第3版) 課件 第1-3章 概述、光纖與光纜、光源和光發(fā)送機(jī)
- 貸款車電子合同模板
- 高空作業(yè)車外墻施工方案
- GB/T 150.3-2024壓力容器第3部分:設(shè)計(jì)
- 拼多多店鋪代運(yùn)營(yíng)合同模板
- 體育訓(xùn)練館維修改造工程鋼結(jié)構(gòu)網(wǎng)架屋面施工組織設(shè)計(jì)
- 機(jī)動(dòng)車安全技術(shù)檢驗(yàn)操作規(guī)范標(biāo)準(zhǔn)
- 電化學(xué)儲(chǔ)能黑啟動(dòng)技術(shù)導(dǎo)則
- MOOC 計(jì)算機(jī)網(wǎng)絡(luò)-華南理工大學(xué) 中國(guó)大學(xué)慕課答案
評(píng)論
0/150
提交評(píng)論