資料庫視訊總結(七)——觸發器
概述
概念:
觸發器是一個在修改指定表中的資料時執行的儲存過程。經常通過建立觸發器來強制實現不同表中的邏輯相關資料的引用完整性或一致性。由於使用者不能繞過觸發器,所以可用它來強制實施複雜的業務規則,以此確保資料的完整性。
優點:
1、自動執行
2、可以通過資料庫中的相關表進行層疊更改
3、可以強制限制,比用CHECK約束所定義的更復雜,觸發器可以引用其他列表中的列
分類
主要分為DDL和DML兩大類
DDL:
該觸發器當伺服器或者資料庫中發生資料定義語言(ddl)事件時將被呼叫。如果要執行以下操作,可以使用DDL觸發器
1、要防止對資料庫架構進行某些更改
2、希望將資料庫中發生某種情況以響應資料庫架構中的更改
3、要記錄資料庫架構中的更改或者事件
DML:
該觸發器是當資料庫伺服器中發生資料操作語言(dml)事件時要執行的操作。通常所說的DML觸發器主要包括三種:INSERT觸發器、UPDATE觸發器、DELETE觸發器、DML觸發器可以查詢其他表,還可以包含發咋的sql語句
建立INSERT觸發器
語法格式:
CREATE TRIGGER trigger_name
On+表或者檢視
{
For\after\instead of
Delete,insert,update
As
Sql_statement
}
舉例:
select 班級人數 from 班級資訊 where 班級編號='101'
insert into 學生資訊 values('1258963','王俊','女','1986-01-16','101','河北省廊坊市安次區')
select 班級人數 from 班級資訊 where 班級編號='101'
效果如下:
建立DELETE觸發器
舉例:
建立觸發器
Create trigger t_deleteteacher
On 教師資訊
For delete
As
Select 姓名 as 被刪除的教師姓名,性別,年齡,聯絡電話 from deleted
觸發:
Delete from 教師資訊 where 教師編號='2005001'
效果如下:
update觸發器:
建立 create trigger t_update on 教師資訊 for update as if(update(姓名)or update(性別)) begin print'事務不能被處理,基礎資料不能修改!' rollback transaction end else print'資料修改成功!' 執行: Update 教師資訊 set 姓名='李芳' where 教師編號='20020010' Select * from 教師資訊 輸出: 事務不能被處理,基礎資料不能修改、 執行: Update 教師資訊 set 聯絡電話='123456789454' where 教師編號='20050010' 輸出: 資料修改成功
建立DDL觸發器
**語法格式:**
Create trigger trigger_name
On all server|detabase
With encryption(是否加密)
For |after{event_type}
As
Sql_statement
舉例:
create trigger t_notdelete
on database
for drop_table,alter_table
as
print'事務不能被處理,基礎資料表不能被修改和刪除!'
rollback
管理觸發器
禁用:
發一:直接右擊禁用
發二:用sql 語句:
Alter table 員工資訊
Disable trigger t_add
啟用同上:
刪除:
1、右擊刪除
2、Drop trigger t_add
遞迴觸發器
使用遞迴觸發器需要考慮以下的事項和原則
1、遞迴觸發器很複雜,必須經過有條理的設計和全面的測試
2、使用者要求以特定的順序更新使用者的表時,使用遞迴觸發器就會產生問題
3、所有觸發器一起構成一個大事務。任何觸發器中的任何位置上的ROLLBACK命令都將取消所有資料輸入,所有資料均被擦除,並且無任何資料將被放到表中
4、觸發器最多隻能遞迴16層,