zoukankan      html  css  js  c++  java
  • 触发器实例讲解

    SQL触发器实例讲解(本文是来自百度文库)
    
    备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分享下给大家。
    
     
    
    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 
          常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 
    
          我为什么要使用触发器?比如,这么两个表: 
    
          Create Table Student(              --学生表 
            StudentID int primary key,       --学号 
            .... 
           ) 
    
          Create Table BorrowRecord(               --学生借书记录表 
            BorrowRecord   int identity(1,1),       --流水号   
            StudentID      int ,                    --学号 
            BorrowDate     datetime,                --借出时间 
            ReturnDAte     Datetime,                --归还时间 
            ... 
          ) 
    
         用到的功能有: 
            1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 
            2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 
         等等。 
    
         这时候可以用到触发器。对于1,创建一个Update触发器: 
    
         Create Trigger truStudent 
           On Student                         --在Student表中创建触发器 
           for Update                          --为什么事件触发 
         As                                        --事件触发后所要做的事情 
           if Update(StudentID)            
           begin 
    
             Update BorrowRecord 
               Set StudentID=i.StudentID 
               From BorrowRecord br , Deleted   d ,Inserted i      --Deleted和Inserted临时表 
               Where br.StudentID=d.StudentID 
    
           end        
                     
         理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 
         一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是: 
                                 虚拟表Inserted                     虚拟表Deleted 
    
    在表记录新增时     存放新增的记录                         不存储记录 
             修改时           存放用来更新的新记录                   存放更新前的记录 
             删除时           不存储记录                             存放被删除的记录 
    
    
         一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。 
    
         对于2,创建一个Delete触发器 
         Create trigger trdStudent 
           On Student 
           for Delete 
         As 
           Delete BorrowRecord 
             From BorrowRecord br , Delted d 
             Where br.StudentID=d.StudentID 
    
         从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。 
    
    SQL触发器实例2
    

      

  • 相关阅读:
    2.MYSQL之初体验
    nginx+uWSGI+django+virtualenv+supervisor
    静态动态网页
    web server 基础知识
    nginx与location语法详解
    编译安装nginx
    虚拟环境之virtualenvwrapper
    python开发之virtualenv
    【剑指Offer】面试题12. 矩阵中的路径
    【剑指Offer】面试题11. 旋转数组的最小数字
  • 原文地址:https://www.cnblogs.com/hanke123/p/5221885.html
Copyright © 2011-2022 走看看