zoukankan      html  css  js  c++  java
  • SQL_触发器

    触发器:是一种实施复杂的,完整性约束的特殊存储过程.

    它是一种特殊的存储过程
    也具备事务的功能
    它能在多表之间执行特殊的业务规则

    触发器是在对表进行插入、更新或删除操作时自动执行的存储过程
    触发器通常用于强制业务规则
    触发器是一种高级约束,可以定义比用CHECK 约束更为复杂的约束 :可执行复杂的SQL语句(if/while/case)、可引用其它表中的列

    触发器定义在特定的表上,与表相关。
     自动触发执行
     不能直接调用
     是一个事务(可回滚)

    修改操作 inserted表 deleted表
    增加(INSERT)记录 存放新增的记录 ------
    删除(DELETE)记录 ----- 存放被删除的记录
    修改(UPDATE)记录 存放更新后的记录

    存放更新前的记录

    insert 触发器:当向表中插入数据时触发,自动执行触发器中定义的SQL语句

    delete触发器:当删除表中记录时触发,自动执行触发器中定义的SQL语句

    update触发器:当更新表中某列或多列时触发,自动执行触发器中定义的SQL语句

    update触发器无论是对表中的一行或多行,还是一列或多列,都将执行触发器操作。但是在实际需求中,可能只关心对特定列是否被更新。如果特定的列被更新,就执行触发器操作。这可以通过列上的update语法:if update<列名>来实现。在同一个触发器的定义语句中,可以使用多条if update 语句来对不同的列的修改执行不同的触发器操作。

    instead of触发器的使用范围,instead of 触发器可以同时在数据表和视图中使用。通常在以下几种情况下,建议使用instead of触发器:
    数据库里的数据禁止修改:例如电信部门的通话记录是不能修改的,一旦修改,则通话费用的计数将不准确。
    有可能要回滚修改的SQL语句
    在视图中使用触发器
    用自己的方式去修改数据

    语法:

    CREATE TRIGGER trigger_name
     ON table_name
     [WITH ENCRYPTION]
      FOR [DELETE, INSERT, UPDATE]
     AS
      T-SQL语句
    GO

    alter trigger tr_insert_recordinfo on recordinfo for insert as declare @cardid int, @pcid int, @carnember varchar(20)

    begin  

    select @pcid=pcid ,@cardid=cardid from inserted   update pcinfo set pcuse=1 where pcid=@pcid  

    select @carnember=cardnumber from cardinfo where cardid =@cardid  

    print '上机成功'

    end;

    declare @carid int

    select @carid=cardid from cardinfo where cardnumber='023-003'

    insert into recordinfo(cardid,pcid,begintime) values(@carid,1,GETDATE())

    使用触发器的优点:

    触发器可以强制比用check约束定义的约束更为复杂的约束。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一张表中的多个同类触发器(insert、       update或delete)允许采取多个不同的对策以响应同一条修改语句。
    触发器的主要作用:实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。
    使用触发器的缺点:
     触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。触发器本身没有错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们  可以通过关系、触发器、存储过程、应用程序等来实现数据操作。同时规则、约束、缺省值也是保证数据完整性的重要屏障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。

  • 相关阅读:
    上海电信 华为HG8240R 光猫 破解
    RedSn0w 0.9.10b5 越狱iphone 4 ios 5.0.1 Cydia闪退解决
    用IIS 7.5 Express代替IIS和开发工具vs自带的ASP.NET Development Server
    远程桌面连接问题
    Enterprise Library 5.0 Hands On Lab(1):数据访问程序块(一)
    [Havok] Havok Physics物理引擎的学习入门
    [设计模式] 深入浅出单实例Singleton设计模式(Java版)
    [C#] MD5 加密的具体流程
    [轻音乐] 理查德·克莱德曼专辑[8CD]
    [SEO] [DeDe]优化SEO
  • 原文地址:https://www.cnblogs.com/shuaif/p/3090387.html
Copyright © 2011-2022 走看看