DML触发器:是当数据库发生数据语言操作事件时会自动执行的存储过程。(DELETE,UPDATE,INSERT)
(1)AFTER触发器:这类触发器是在记录已经改变完之后,才会被激活的,主要是记录变更之后的处理或检查,一旦发现错误也可以用rollback transaction返回操作
(2)INSTEAD OF触发器:取代原来操作,在记录变更之前发生的。他并不执行原来SQL语句里的操作。
DDL触发器:(sql2005)响应数据定义语言语句时触发,一般用于数据库中执行管理任务。(CREATE,ALTER,DROP,GRANT,DENY,REVOKE,UPDATE STATISTICS)
语法:
CREATE TRIGGER trigger_name on {table_name | view} [with encryption] {FOR | AFTER | INSTEAD OF} {[INSERT][DELETE][UPDATE]} [not for replication] AS sql_statement [....n]
不能在视图上定义AFTER触发器
DDL触发器:
create trigger t1 on database for create_table as print '想创建表,没门' rollback create table mytable(id int)
DML触发器:
create trigger t2 on athlete for insert as print '想插入数据,没门' rollback
DML触发器有两个特殊的表inserted,deleted.
插入表里存放的是更新前得记录:对于插入记录操作来说,插入表里存放的是要插入的数据。对于更新记录操作来说,插入表存放的是要更新的记录。
删除表里存放的是更新后的记录:对于更新记录操作来说,删除表里存放的是更新前得记录(更新完后立即删除);对于删除记录来说,删除表里存入的是被删除的旧记录。
select * from test2 drop trigger trig create trigger tg1 on test2 for delete,update,insert as select * from inserted select * from deleted
delete操作:
insert操作:
update操作: