一、触发器特点
1、触发器是不需要用户直接调用的特殊存储过程,当对表进行插入、删除、修改时,操作自动执行。
2、触发器可以用来实施复杂的完整性约束,以防止对数据的错误修改。
主键——主体完整性;外键——参照完整性;属性范围——用户定义完整性
3、触发器不允许带参数,也不允许被调用。
4、触发器不反悔任何结果。
二、触发器类
DELETE触发器、INSERT触发器、UPDATE触发器
三、触发器工作原理
触发器触发时,系统自动在内存中创建只读的deleted表或inserted表,触发器完成后自动删除。
inserted表:
- 临时保存插入或更新后的记录行;
- 可从inserted表中检查插入的数据是否满足需求;
- 不满足,则向用户报告错误,回滚插入操作。
deleted表:
- 临时保存删除或更新前的记录行;
- 可从deleted表检查被删除的数据是否满足业务需求;
- 不满足,则向用户报告错误消息,回滚插入操作。
四、触发方式
五、触发器格式
六、示例
CREATE TRIGGER tr_stu on t_student FOR after UPDATE
AS print @rowcount
CREATE TRIGGER tr_stu on t_student FOR after INSERT,UPDATE
AS RAISERROR(4008,16,10)
CREATE TRIGGER tr_check_sc ON t_sc FOR after INSERT
AS
update t_sc set grade=null where sno = (select sno from inserted) and cno=(select cno from inserted)
CREATE TRIGGER tr_dept ON t_student FOR after INSERT,UPDATE
AS
update t_student set dept='计算机系' where sno = (select sno from inserted where dept is null)
CREATE TRIGGER tr_ex ON t_student FOR after update
AS
update t_sc set sno=(select sno from inserted) where sno=(select sno from deleted)
CREATE TRIGGER tr_ex ON t_sc FOR after INSERT
AS
delete from t_sc where sno = (select sno from inserted where sno not in (select sno from t_student)) or cno = (select cno from inserted where cno not in (select cno from t_course))