zoukankan      html  css  js  c++  java
  • SQL数据库触发器

    触发器的概念
    触发器是一种特殊的存储过程,它被分配给某个特定的表。当对这个表进行插入、更新或删除操作时,自动调用触发器执行触发器里规定的操作.
    触发器是确保数据完整性和一致性的基本有效的方法。
    和表相关联,可以看作是表的一部分;
       不能直接引用,通过insert/update/delete自动激活;
       属于事务机制;
       同一类型的触发器在表上可以有多个
    触发器的特点
    不接受用户参数,也不返回用户参数; 
    事件驱动,自动调用;存储在表上。
    对数据库中的相关表进行级联更新和删除
    强制比Check约束更复杂的数据完整性。
    可以引用其他表中的列
    触发器的种类
    插入型触发器
    删除型触发器
    更新型触发器
    一个表上可以定义多种类型的触发器
    触发器的工作原理
    SQL Server创建了两个专用表:inserted表和deleted表。这是两个逻辑表,由系统来维护,不允许用户直接对这两个表进行修改。它们存放于内存中,不存放在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。

    触发器的工作方式
    执行触发器时,系统创建了两个特殊的逻辑表:
      inserted和deleted表,不允许用户直接对它们进行
       修改。它们存放在内存中,不存放在数据库中。
    当向表中插入数据时,insert触发器触发执行,新的记录插入到触发器表和inserted表中。 
    当触发一个delete触发器时,被删除的表记录存放到deleted表中。

    修改一条记录等于插入一条新记录,同时删除旧记录,表中原始记录放在deleted中,修改过的记录插入到inserted表中。

    创建触发器

    语法:
             
    create trigger 触发器名
            on 表名
            for delete /insert /update
            as 
            触发器要执行的操作


    创建插入型触发器
    --在users表中定义触发器,当插入纪录时弹出消息:你已经向users表里插入了一条纪录!
    create trigger t_users
    on users
    for insert 
    as 
    print '已向users表里插入了一条记录'
    Go

    创建delete触发器
    --在users表中定义触发器,当删除纪录时弹出消息:你已经向users表里删除了一条纪录!
    create trigger t_users
    on users
    for insert 
    as 
    print '已向users表里插入了一条记录'
    Go
    创建update触发器
    如果在xs表中更新数据,则在执行时显示提示信息。
               
    create trigger tr_update
              on users
              for update
              as
              print ‘你已经更新了此数据!’
              go


    修改、删除触发器
    修改语法:

     
    alter trigger 触发器名
            on 表名
            for delete /insert /update
            as 
            触发器要执行的操作


    删除语法:
    drop trigger 触发器名


    禁用、启用触发器
    禁用语法:

    Alter table   表名    
    disable trigger 触发器名


    启用语法:
    Alter table 表名     
    enable trigger 触发器名
    使用触发器时应考虑的因素
    首先检查约束。如果在触发器表上存在约束,则约束在   触发器执行前检查。如果违反约束,触发器就不执行。 


    对任何动作都可以有多个触发器。允许在一个表上嵌套几个触发器。一个表可以定义多个触发器。每个触发器可以为一个或几个动作定义。 

  • 相关阅读:
    .csproj文件
    堆栈
    数据库操作(一)
    Math数学函数
    SSM框架下各个层的解释说明
    MyBatis DAO层传递参数到mapping.xml
    Spring MVC3在controller和视图之间传递参数的方法
    注册/登陆界面验证码的作用及代码实现
    input中name和id的区别
    <mvc:default-servlet-handler/>的作用
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663674.html
Copyright © 2011-2022 走看看