觸發器是用戶定義在表上的一類由事件驅動的特殊過程。用戶對錶的增加、刪除、修改操作均由服務器自動激活相應的觸發器。並在DBMS的核心層進行完整性控制。
inserted表、deleted表
這是兩個臨時表,觸發器執行前創建,執行完畢時刪除。
- 執行insert語句時,Inserted存放即將插入的數據(所有要插入的行)
- 執行delete語句時,在刪除數據前,deleted表存放要刪除的數據。
- 執行update語句時,相當於先執行delete語句,後執行insert語句。
【N】觸發器名
【T】表名
【SQL】sql語句
創建觸發器
sql語句:
create trigger【N】on【T】《for/after/instead of》《insert/update/delete》as 【SQL】
- for/after:對數據進行增刪改之後執行【SQL】(【SQL】在激活觸發器的語句執行之後執行)
- instead of:對數據進行增刪改之前執行【SQL】,並放棄執行引起增刪改操作的語句。(【SQL】代替了激活觸發器的語句)
- insert/update/delete:爲激活觸發器的操作類型,對應增,改,刪操作。
修改觸發器
alter trigger【N】on【T】《for/after/instead of》《insert/update/delete》as 【SQL】
修改可以理解是刪除觸發器N之後再創建
刪除觸發器
drop trigger【N】
例子
要求刪除一個學生時,該學生的選課記錄同時被刪除。
student(學生表)的部分數據
sc(選課表)的部分數據
- 創建觸發器
create trigger DELETE_STU on student for delete as
declare @tem_sno char(9)
select @tem_sno=sno from deleted
delete from sc where sno=@tem_sno
2. 激活觸發器
delete from student where sno=182056299
刪除了學號爲182056299的學生
觸發器將sc表中的選課記錄也刪除了