黑马视频-触发器

触发器inserted表与deleted表
  1. 执行insert语句,使用inserted表
  2. 执行delete语句,使用deleted表
  3. 执行update语句,旧数据放到deleted表,新数据放到inserted表

触发器:自动化,减少手动到来误操作
触发器没有执行完毕,就会一直占用表,其他链接不能使用该表
output.inserted.列名
1、DML触发器:insert delete update(不支持select)
    after触发器(for) instead of 触发器(不支持before触发器)   
2、DDL触发
  1. create trigger tbl_TblClass_insert_after
  2. on TblClass after insert
  3. as
  4. begin
  5. declare @id int,
  6. declare @name varchar(50),
  7. declare @desc varchar(50)
  8. select @id=tClassId ,@name=tclassName,@desc=ClassDesc from inserted
  9. print @id
  10. print @name
  11. print @desc
  12. end
  13. --测试
  14. insert into TblClass values('班级名称','班级描述')
将删除的数据备份到另一个表中
  1. create trigger tri_TblClass_delete_after
  2. on TblClass after delete[,insert]
  3. as
  4. begin
  5. insert into TblClass_Bak select * from deleted
  6. end

sql触发器是表级触发器,无论删除多少行或者插入多少行数据,只触发一次
是按照语句触发的,每次执行一次语句,触发一次触发器
不会每条语句都触发 

代理实现备份:
建立作业 
  1. create trriger tri_TblClass_delete_instead_of
  2. on TblClass instead of delete
  3. as
  4. begin
  5. insert into TblClassBak select * from deleted
  6. end
  7. --使用 instead of 触发器后,原来删除操作被 insert into TblClassBak
尽量避免在触发器中执行耗时操作,因为触发器会与Sql语句认为在同一个事务。事务不结束就无法释放锁

避免在触发器中较复杂的操作,影响触发器性能,要想编写高效触发器考虑的因素较多

触发器编写时注意对多行触发时的处理 (一般不建议使用游标,性能问题)




posted @ 2015-11-18 19:25  wupd2014  阅读(141)  评论(0编辑  收藏  举报