zoukankan      html  css  js  c++  java
  • 黑马视频-触发器

    触发器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语句认为在同一个事务。事务不结束就无法释放锁

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

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




  • 相关阅读:
    JVM总结-java基本类型
    JVM总结-虚拟机怎么执行字节码
    spring-BeanDefinition流程源码分析
    spring-BeanFactory源码解析
    linux文件基本权限-基本权限的修改
    Spring-IoC容器初始化流程源码分析
    spring-AOP
    JavaScript笔记 第十六章 匿名函数和闭包
    C# 指针(unsafe与fixed的使用)
    devenv.exe
  • 原文地址:https://www.cnblogs.com/wupd2014/p/4975627.html
Copyright © 2011-2022 走看看