1. 程式人生 > >資料庫視訊總結(七)——觸發器

資料庫視訊總結(七)——觸發器

概述

概念:
觸發器是一個在修改指定表中的資料時執行的儲存過程。經常通過建立觸發器來強制實現不同表中的邏輯相關資料的引用完整性或一致性。由於使用者不能繞過觸發器,所以可用它來強制實施複雜的業務規則,以此確保資料的完整性。

優點:
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層,