zoukankan      html  css  js  c++  java
  • SQL触发器实例1

    定义: 何为触发器?

    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      --DeletedInserted临时表

               Where br.StudentID=d.StudentID

           end       

                    

        理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted Inserted分别表示触发事件的表旧的一条记录新的一条记录

        一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:虚拟表InsertedDeleted

        一个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.触发机制。

  • 相关阅读:
    MySQL数据库之索引
    python面向对象编程
    linux端口占用
    lintcode
    java基础
    lintcode
    linux 常用命令
    Docker & Kubernates
    angular preparation
    java 命令行
  • 原文地址:https://www.cnblogs.com/jazzka702/p/1528214.html
Copyright © 2011-2022 走看看