資源描述:
《數(shù)據(jù)庫(kù)原理與SQL Server教程第13章 觸發(fā)器》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、數(shù)據(jù)庫(kù)原理與SQLServer教程第十三章觸發(fā)器第十三章觸發(fā)器13.1觸發(fā)器簡(jiǎn)介13.2創(chuàng)建和管理觸發(fā)器13.3觸發(fā)器工作原理及應(yīng)用實(shí)訓(xùn)13創(chuàng)建和管理觸發(fā)器2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.1觸發(fā)器簡(jiǎn)介觸發(fā)器是一種特殊類型的存儲(chǔ)過(guò)程,它在試圖更改觸發(fā)器所保護(hù)的數(shù)據(jù)時(shí)自動(dòng)執(zhí)行。觸發(fā)器與特定的表相關(guān)聯(lián)。觸發(fā)器的主要作用是能夠?qū)崿F(xiàn)由主鍵和外鍵所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)的一致性。當(dāng)使用UPDATE、INSERT或DELETE中的一種或多種數(shù)據(jù)修改操作在指定表中對(duì)數(shù)據(jù)進(jìn)行修改時(shí),觸發(fā)器會(huì)生效并自動(dòng)執(zhí)行。觸發(fā)器可以查詢
2、其他表,并可以包含復(fù)雜的Transact-SQL語(yǔ)句。一個(gè)表可以有多個(gè)觸發(fā)器。2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.1觸發(fā)器簡(jiǎn)介觸發(fā)器具有如下優(yōu)點(diǎn):(1)實(shí)現(xiàn)數(shù)據(jù)庫(kù)中跨越相關(guān)表的級(jí)聯(lián)修改。(2)實(shí)現(xiàn)比CHECK約束更復(fù)雜的數(shù)據(jù)完整性。(3)實(shí)現(xiàn)自定義的錯(cuò)誤信息。(4)維護(hù)非規(guī)范化數(shù)據(jù)。(5)比較修改前后數(shù)據(jù)的狀態(tài)。2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.1創(chuàng)建觸發(fā)器13.2.2修改觸發(fā)器13.2.3刪除觸發(fā)器13.2創(chuàng)建和管理觸發(fā)器2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.1創(chuàng)
3、建觸發(fā)器觸發(fā)器可以由Transact-SQL語(yǔ)句創(chuàng)建,也可以通過(guò)企業(yè)管理器來(lái)創(chuàng)建:創(chuàng)建觸發(fā)器的方法:1.使用Transact-SQL語(yǔ)句創(chuàng)建觸發(fā)器2.使用企業(yè)管理器創(chuàng)建觸發(fā)器3.創(chuàng)建觸發(fā)器的注意事項(xiàng)2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.1創(chuàng)建觸發(fā)器1.使用Transact-SQL語(yǔ)句創(chuàng)建觸發(fā)器創(chuàng)建觸發(fā)器可以使用CREATETRIGGER語(yǔ)句,其語(yǔ)法格式如下:CREATETRIGGERtrigger_nameON{table
4、view}[WITHENCRYPTION]{{{FOR
5、AFTER
6、INSTEADOF}{[
7、INSERT][,][UPDATE]}[WITHAPPEND][NOTFORREPLICATION]AS[{IFUPDATE(column)[{AND
8、OR}UPDATE(column)][…n]
9、IF(COLUMNS_UPDATED(){bitwise_operator}updated_bitmask){comparison_operator}column_bitmask[…n]}]sql_statement[…n]}}2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.1創(chuàng)建觸發(fā)器2.使用企業(yè)管理器創(chuàng)建觸發(fā)器實(shí)例演示:使用企
10、業(yè)管理器創(chuàng)建觸發(fā)器2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.1創(chuàng)建觸發(fā)器3.創(chuàng)建觸發(fā)器的注意事項(xiàng)在創(chuàng)建觸發(fā)器時(shí),應(yīng)該考慮到下列事實(shí)和原則:(1)大多數(shù)觸發(fā)器是后反應(yīng)的,約束和INSTEADOF觸發(fā)器是前反應(yīng)的。(2)在觸發(fā)器定義的表中執(zhí)行插入、刪除或者更新語(yǔ)句后觸發(fā)器自動(dòng)執(zhí)行。(3)創(chuàng)建觸發(fā)器的用戶必須有相關(guān)的權(quán)限。(4)只有表或視圖的所有者、sysadmin角色的成員、db_owner和db_ddladmin固定數(shù)據(jù)庫(kù)角色的成員能夠創(chuàng)建和刪除觸發(fā)器,這個(gè)權(quán)限不能被傳遞。(5)表的所有者不能在視圖或者臨時(shí)表上創(chuàng)建AFT
11、ER觸發(fā)器,但是,觸發(fā)器可以引用視圖和臨時(shí)表。(6)表的所有者可以在視圖和臨時(shí)表上創(chuàng)建INSTEADOF觸發(fā)器,INSTEADOF觸發(fā)器大大的擴(kuò)展了視圖能夠支持的更新類型。(7)觸發(fā)器不應(yīng)該返回結(jié)果集2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.1創(chuàng)建觸發(fā)器3.創(chuàng)建觸發(fā)器的注意事項(xiàng)在創(chuàng)建觸發(fā)器時(shí),應(yīng)該考慮到下列事實(shí)和原則:(8)觸發(fā)器包含了T-SQL語(yǔ)句,這與存儲(chǔ)過(guò)程完全相同。(9)觸發(fā)器為數(shù)據(jù)庫(kù)對(duì)象,其名稱必須遵循標(biāo)識(shí)符的命名規(guī)則。(10)SQLServer2000允許在一個(gè)表上嵌套幾個(gè)觸發(fā)器。一個(gè)表可以定義多個(gè)觸發(fā)器,
12、每個(gè)觸發(fā)器可以為一個(gè)或幾個(gè)動(dòng)作定義。(11)雖然觸發(fā)器可以引用當(dāng)前數(shù)據(jù)庫(kù)以外的對(duì)象,但只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建觸發(fā)器。(12)在含有用DELETE或UPDATE操作定義的外鍵的表中,不能定義INSTEADOF和INSTEADOFUPDATE觸發(fā)器。(13)不能包含某些語(yǔ)句。2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.2修改觸發(fā)器對(duì)已有的觸發(fā)器,可以直接進(jìn)行修改而無(wú)需刪除后再重建,修改觸發(fā)器時(shí),可以使用ALTERTRIGGER語(yǔ)句也可以通過(guò)企業(yè)管理器。修改觸發(fā)器的方法:1.ALTERTRIGGER修改觸發(fā)器2.通過(guò)企業(yè)管理器
13、修改觸發(fā)器2021/8/25數(shù)據(jù)庫(kù)原理與SQLServer教程13.2.2修改觸發(fā)器1.ALTERTRIGGER修改觸發(fā)器ALTERTRIGGER語(yǔ)句語(yǔ)法格式如下:ALTERTRIGGERtr