一、定义
1、触发器(Trigger)是用户对某一表中的数据做插入、更新和删除操作时被处罚执行的一段程序,通常我们使用触发器来检查用户对表的操作是否合乎整个应用系统的需求,是否合乎商业规则以维持表内数据的完整性和正确性
2、一个触发器只适用于一个表,每个表最多只能有3个触发器,分别是INSERT触发器、UPDATE触发器和DELETE触发器
二、创建触发器
创建触发器语法
CREATE TRIGGER <触发器名>
ON<表名>
【WITH ENCRYPTION】
{FOR|ALTER|INSTEAD OF} {【INSERT】【,】【UPDATE】【,】【DELETE】}
AS
<SQL语句组>
(1)WITH ENCRYPTION:表示对触发器的文本加密
(2)FOR|ALTER:触发器只有在触发时间包含的所有操作都已成功执行后才被激活。如果仅指定FOR关键字,则ALTER是默认设置
(3)INSTEAD OF:当对触发器作用的表执行INSTEAD OF后面指定的操作时,仅执行触发器程序
(4)创建触发器的语句中用到以下两个逻辑表:
INSTEAD表:存放由于INSERT或UPDATE语句的执行而导致要加到该触发器作用的表中去的所有新行。即把插入或更新表的新行值,在插入或更新表的同时,也将其副本存入INSTEAD表中
DELETE表:存放由于DELETE或UPDATE语句的执行而导致要从该触发器作用的表中删除的所有行
三、举例
1、对SC关系表创建一个INSERT触发器以保证在SC关系表中插入的数据满足参照完整性要求
create trigger insert_SC on sC
for insert
as
if(select count(*)
from s,inserted,c
where s.sNo=inserted.sNo and inserted.cNo=c.cNo)=0
rollback
insert into sC values('202218014037','005',99);
select * from sC;
2、对S表创建一个级联删除的触发器,要求删除s表中记录时要把SC表中相应的选课记录也删除
create trigger deleteTrigger on s
for delete
as
delete sC
from sC,deleted
where sC.sNo=deleted.sNo
delete s
where s.sNo='202218014036';
select * from sC;
四、删除触发器
DROP TRIGGER <触发器名>
举例:删除触发器insert_SC
drop trigger insert_SC;
insert into sC values('202218014037','005',99);
select * from sC;
五、执行触发器
触发器的执行由DBMS自动完成,当对定义了触发器的关系表中做数据更新操作时,系统会自动执行相应的触发器,不需要人为执行