sql觸發(fā)器語(yǔ)法_第1頁(yè)
sql觸發(fā)器語(yǔ)法_第2頁(yè)
sql觸發(fā)器語(yǔ)法_第3頁(yè)
sql觸發(fā)器語(yǔ)法_第4頁(yè)
sql觸發(fā)器語(yǔ)法_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 第七章 觸發(fā)器 本節(jié)要點(diǎn)A 認(rèn)識(shí)觸發(fā)器B 觸發(fā)器的分類(lèi)C觸發(fā)器的創(chuàng)建D使用觸發(fā)器E 觸發(fā)器練習(xí)的鞏固典型的應(yīng)用就是銀行的取款機(jī)系統(tǒng) 帳戶信息表bank 交易信息表transInfo 張三取錢(qián)200 問(wèn)題:沒(méi)有自動(dòng)修改張三的余額最優(yōu)的解決方案就是采用觸發(fā)器:它是一種特殊的存儲(chǔ)過(guò)程它是一種特殊的存儲(chǔ)過(guò)程 也具備事務(wù)的功能也具備事務(wù)的功能 它能在多表之間執(zhí)行特殊的業(yè)務(wù)規(guī)則它能在多表之間執(zhí)行特殊的業(yè)務(wù)規(guī)則 張三開(kāi)戶1000元,李四開(kāi)戶1元 為什么需要觸發(fā)器一、認(rèn)識(shí)觸發(fā)器1、觸發(fā)器的概述定義:觸發(fā)器是在對(duì)指定表插入(insert)、更新(update)或刪除(delete)操作時(shí)所自動(dòng)執(zhí)行的存儲(chǔ)過(guò)程。

2、作用:實(shí)現(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性。 觸發(fā)器是一種高級(jí)約束,可以定義比用check 約束更為復(fù)雜的約束 可執(zhí)行復(fù)雜的SQL語(yǔ)句(if/while/case) 可引用其它表中的列 所有數(shù)據(jù)值均正確的狀態(tài)一、認(rèn)識(shí)觸發(fā)器相似:觸發(fā)器與存儲(chǔ)過(guò)程相似,觸發(fā)器也是SQL語(yǔ)句集。區(qū)別:觸發(fā)器不能用execute語(yǔ)句調(diào)用,而是在用戶執(zhí)行Transact-SQL語(yǔ)句自動(dòng)執(zhí)行。2、觸發(fā)器與存儲(chǔ)過(guò)程的區(qū)別運(yùn)行方式區(qū)別:存儲(chǔ)過(guò)程用戶應(yīng)用程序或觸發(fā)器調(diào)用并執(zhí)行觸發(fā)器特定事件,自動(dòng)執(zhí)行二、觸發(fā)器的分類(lèi)1、DDL觸發(fā)器定義:當(dāng)服務(wù)器或者數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)定義語(yǔ)言(DDL)時(shí)觸發(fā)器將被調(diào)用。DDL

3、數(shù)據(jù)定義語(yǔ)言:創(chuàng)建,修改或刪除數(shù)據(jù)庫(kù)中各種對(duì)象,包括表,視圖,索引等。以下操作可以使用DDL觸發(fā)器:1、要防止對(duì)數(shù)據(jù)庫(kù)架構(gòu)進(jìn)行某些修改 3、要記錄數(shù)據(jù)架構(gòu)中的更改或者事件。 2、希望數(shù)據(jù)庫(kù)中發(fā)生某種情況以響應(yīng)數(shù)據(jù)庫(kù)架構(gòu)中的修改二、觸發(fā)器的分類(lèi)1、DML觸發(fā)器定義:當(dāng)數(shù)據(jù)庫(kù)服務(wù)器中發(fā)生數(shù)據(jù)操作語(yǔ)言(DML)事件時(shí)要執(zhí)行的操作。DML數(shù)據(jù)定義語(yǔ)言:對(duì)已存在數(shù)據(jù)庫(kù)表進(jìn)行元組插入,刪除,修改。2、DML觸發(fā)器的用途( 1 ) DML觸發(fā)器可通過(guò)數(shù)據(jù)庫(kù)中相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)修改,通過(guò)級(jí)聯(lián)引用完整性約束可以更有效的更改。( 2 )DML觸發(fā)器可以防止惡意或者錯(cuò)誤insert,update,以及delete操作,

4、并強(qiáng)制執(zhí)行比check約束 定義的限制更為復(fù)雜的其他限制。( 3 )DML觸發(fā)器可以評(píng)估數(shù)據(jù)修改前后表的狀態(tài),并根據(jù)該差異采取措施。( 4 )一個(gè)表的多個(gè)同類(lèi)DML觸發(fā)器,允許采取多個(gè)不同的操作來(lái)響應(yīng)同一個(gè)修改語(yǔ)句。二、觸發(fā)器的分類(lèi) 觸發(fā)器觸發(fā)時(shí) 創(chuàng)建了DELETED表和INSERED表 只讀,不允許修改;觸發(fā)器執(zhí)行完成后,自動(dòng)刪除1、delete表 delete表存放由執(zhí)行delete或者update語(yǔ)句而要從表中刪除所有行,在執(zhí)行delete或update被刪除的行從觸發(fā)觸發(fā)器表中移動(dòng)到delete表中。2、insert表insert表存放由執(zhí)行insert或者update語(yǔ)句而要向表中插

5、入的所有的行,在執(zhí)行insert或update新的行同時(shí)添加到觸發(fā)器的表和insert表中,insert表的內(nèi)容是觸發(fā)觸發(fā)器的表新行的副本。二、觸發(fā)器的分類(lèi)修改操作inserted表deleted表增加增加(INSERT)(INSERT)記錄記錄存放新增的記錄存放新增的記錄-刪除刪除(DELETE)(DELETE)記錄記錄-存放被刪除的記錄存放被刪除的記錄修改修改(UPDATE)(UPDATE)記錄記錄存放更新后的記錄存放更新后的記錄存放更新前的記錄存放更新前的記錄inserted表和deleted表存放的信息三、觸發(fā)器創(chuàng)建語(yǔ)法create trigger 觸發(fā)器名稱(chēng)on 表名 / 視圖名fo

6、r / after /insted of -觸發(fā)的時(shí)機(jī)delete/insert/update -觸發(fā)器的類(lèi)型assql語(yǔ)句end例:在student數(shù)據(jù)庫(kù)的學(xué)員信息表表中 創(chuàng)建一個(gè)stuinfo_delete觸發(fā)器create trigger stuinfo_deleteon 學(xué)員信息表for delete asdelete 成績(jī)表from 成績(jī)表 a , deleted bwhere a.學(xué)號(hào)=b.學(xué)號(hào)四、DML觸發(fā)器1、insert觸發(fā)器create trigger stuinfo_insert -創(chuàng)建觸發(fā)器on 學(xué)生表after insert asupdate stuinfo -插入年

7、齡set 年齡=datediff(year,s.生日,getdate()from 學(xué)生表 a inner join inserted bwhere a.學(xué)號(hào)=b.學(xué)號(hào)-after 之insert觸發(fā)器insert觸發(fā)器對(duì)目標(biāo)表執(zhí)行insert語(yǔ)句時(shí),就會(huì)調(diào)用觸發(fā)器。例如我們添加一個(gè)年齡列,這個(gè)觸發(fā)器的名稱(chēng)為stuinfo_insert插入一個(gè)新的學(xué)員信息,以驗(yàn)證觸發(fā)器是否執(zhí)行insert into stuinfo value (0002, mike, 男, 1993-01-25, null)select *from stuinfotransInfocardIDtransType transMo

8、ney1001 00021001 0002存入 300存入 500insertedcardIDtransType transMoney1001 0001支取 200transInfocardIDtransType transMoney1001 00021001 0002存入 300300存入 5005001001 0001支取 200插入記錄行觸發(fā)insert觸發(fā)器。向inserted表中插入新行的副本觸發(fā)器檢查inserted表中插入的新行數(shù)據(jù),確定是否需要回滾或執(zhí)行其他操作INSERT觸發(fā)器的工作原理:觸發(fā)器的工作原理:四、DML觸發(fā)器1、delete觸發(fā)器定義:當(dāng)觸發(fā)delete觸發(fā)器時(shí)

9、,從表中刪除的行將會(huì)放置在一個(gè)特殊的delete表中,delete跟deleted表一樣是個(gè)臨時(shí)表。區(qū)別:delete觸發(fā)器并不執(zhí)行truncate table語(yǔ)句,原因在于日志不記錄 truncate table例題:刪除數(shù)據(jù)庫(kù)【student】中【學(xué)員信息】表時(shí),相應(yīng)的考試成績(jī)備份表也會(huì)刪除,使用delete語(yǔ)句刪除002這個(gè)學(xué)員信息,驗(yàn)證觸發(fā)器就會(huì)自動(dòng)執(zhí)行,并刪除學(xué)員成績(jī)備份表中的信息create trigger stuinfo_delete -創(chuàng)建觸發(fā)器on 學(xué)員信息for delete asdelete 成績(jī)表from 成績(jī)表 a , deleted bwhere a.學(xué)號(hào)=b.學(xué)號(hào)

10、insert 成績(jī)表 values(0002 ,90,95)select *from 成績(jī)表 delete from 學(xué)員信息 where stuno=0001select * from 成績(jī)表transInfocardIDtransType transMoney存入 300存入 5001001 0001支取 200transInfocardIDtransType transMoney1001 00021001 0002存入 300存入 500deletedcardIDtransType transMoney1001 0001支取 200刪除記錄行觸發(fā)delete觸發(fā)器向deleted表中插入

11、被刪除的副本觸發(fā)器檢查deleted表中被刪除的數(shù)據(jù),決定是否需要回滾或執(zhí)行其他操作DELETE觸發(fā)器的工作原理:觸發(fā)器的工作原理:四、DML觸發(fā)器update觸發(fā)器定義:當(dāng)一個(gè)update語(yǔ)句在目標(biāo)表運(yùn)行的時(shí)候就調(diào)用更新觸發(fā)器,例題:數(shù)據(jù)庫(kù)【student】中【stuinfo】表中生產(chǎn)日期的改變,對(duì)應(yīng)學(xué)員的年齡也發(fā)生改變create trigger stuinfo_update -創(chuàng)建觸發(fā)器on stuinfoafter stuinfo asif update(birthday) beginupdate stuinfo -執(zhí)行SQL語(yǔ)句set stuage=datediff(year,s.b

12、irthday,getdate()from stuinfo s inner join insertd ion s.stuno=i.stunoend四、DDL觸發(fā)器定義:當(dāng)服務(wù)器或者數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)定義語(yǔ)言(DDL)時(shí)觸發(fā)器將被調(diào)用。DDL數(shù)據(jù)定義語(yǔ)言:創(chuàng)建,修改或刪除數(shù)據(jù)庫(kù)中各種對(duì)象,包括表,視圖,索引等。例題:如何使用DDL觸發(fā)器來(lái)防止在【student】數(shù)據(jù)庫(kù)中表被修改刪除的操作,首先要在 【student】數(shù)據(jù)庫(kù)中定義一個(gè)數(shù)據(jù)庫(kù)的DDL觸發(fā)器。create trigger TRIG_DDL -創(chuàng)建一個(gè)DDL觸發(fā)器for drop_table,drop_view -刪除表或刪除視圖on d

13、atabase -數(shù)據(jù)庫(kù)asbegin print 無(wú)法修改或者刪除表,請(qǐng)?jiān)谥敖没騽h除DDL觸發(fā)器TRIG_DDL! ROLLBACK TRANSACTION -采用回滾的辦法以達(dá)到阻止操作的目的end 嵌套觸發(fā)器 如果一個(gè)觸發(fā)器在執(zhí)行操作時(shí)引發(fā)了另一個(gè)觸發(fā)器,而這個(gè)觸發(fā)器又接著引發(fā)下一個(gè)觸發(fā)器,那么就形成了觸發(fā)器的嵌套。任何觸發(fā)器都可以包含影響另一個(gè)表的UPDATE、INSERT或者DELETE語(yǔ)句。嵌套觸發(fā)器在安裝時(shí)就被啟用嵌套觸發(fā)器在安裝時(shí)就被啟用可以使用系統(tǒng)存儲(chǔ)過(guò)程可以使用系統(tǒng)存儲(chǔ)過(guò)程sp_configuresp_configure禁用和重新啟用嵌套禁用和重新啟用嵌套觸發(fā)器最多可以

14、嵌套觸發(fā)器最多可以嵌套3232層層禁用嵌套禁用嵌套EXEC sp_configure nested triggers,0啟用嵌套啟用嵌套EXEC sp_configure nested triggers,1管理觸發(fā)器查看觸發(fā)器:查看觸發(fā)器:可以使用像sp_helptext、sp_help和sp_depends等系統(tǒng)存儲(chǔ)過(guò)程來(lái)查看觸發(fā)器的有關(guān)信息修改觸發(fā)器:修改觸發(fā)器:修改觸發(fā)器的語(yǔ)法與創(chuàng)建觸發(fā)器的語(yǔ)法一樣,只要把create改為alter即可刪除觸發(fā)器:刪除觸發(fā)器:禁用禁用DML觸發(fā)器:觸發(fā)器:禁用禁用DDL觸發(fā)器:觸發(fā)器:禁用所有觸發(fā)器:禁用所有觸發(fā)器:?jiǎn)⒂糜|發(fā)器:?jiǎn)⒂糜|發(fā)器:只要將DISA

15、BLE變?yōu)镋NABLE即可exec sp_helptext TRIG_DDL -查看觸發(fā)器的內(nèi)容Alter trigger TRIG_DDL drop trigger TRIG_DDLDISABLE TRIGGER tri_stuinfo_update ON stuInfoDISABLE TRIGGER TRIG_DDL ON DATABASEDISABLE TRIGGER ALL ON ALL SERVERENABLE TRIGGER tri_stuinfo_update ON stuInfo -啟用觸發(fā)器ENABLE TRIGGER trig_DDL ON DATABASE -啟用數(shù)據(jù)庫(kù)觸

16、發(fā)器ENABLE TRIGGER ALL ON ALL SERVER -啟用以同一作用域定義的所有觸發(fā)器不能在觸發(fā)器中使用的語(yǔ)句不能在觸發(fā)器中使用的語(yǔ)句 觸發(fā)器中可以使用大多數(shù)觸發(fā)器中可以使用大多數(shù) T-SQL T-SQL 語(yǔ)句,語(yǔ)句,但如下一些語(yǔ)句是不能在觸發(fā)器中使用的。但如下一些語(yǔ)句是不能在觸發(fā)器中使用的。CREATE 語(yǔ)句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。ALTER 語(yǔ)句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。DROP 語(yǔ)句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。DISK 語(yǔ)句,如:DISK INIT、DISK RESIZE。LOAD 語(yǔ)句,如:LOAD DATABASE、LOAD LOG。RESTORE 語(yǔ)句,如:RESTORE DATABASE、RESTORE LOG。RECONFIGURETRUNCATE TABLE 語(yǔ)句在sybase的觸發(fā)器中不可使用!觸發(fā)器是在對(duì)表進(jìn)行插入、更新或刪除操作時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過(guò)程,觸發(fā)器是在對(duì)表進(jìn)行插入、更新或刪除操作時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過(guò)程,觸發(fā)器通常用于強(qiáng)制業(yè)務(wù)規(guī)則觸發(fā)器通常用于強(qiáng)制業(yè)務(wù)規(guī)則觸發(fā)器還是一個(gè)特殊的事務(wù)單元,當(dāng)出現(xiàn)錯(cuò)誤時(shí),可以執(zhí)行觸發(fā)器還是一個(gè)特殊的事務(wù)單元,當(dāng)出現(xiàn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論