SQL中触发器实例讲解

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
     常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)

我为什么要使用触发器?比如,这么两个表:

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.触发机制。
    这里我们只讲解最简单的触发器。复杂的容后说明。
    事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被“级联”所替代

转载于:https://www.cnblogs.com/cooolbin/archive/2008/02/27/1083431.html

SQL中触发器实例讲解(转)相关推荐

  1. SQL server 触发器实例讲解

    SQL触发器实例讲解(本文是来自百度文库) 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常 ...

  2. python3连接sql server数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  3. python调用sql数据库_Python3操作SQL Server数据库(实例讲解)

    1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话,实用性就不那么大了. 2.最基本的SQL查询语句 python是使用pymssql这个模 ...

  4. Spark SQL 中UDF的讲解

    Spark SQL 中UDF的讲解 User Define Function, 用户自定义函数,简称UDF,存在与很多组件中. 在使用Sparksql的人都遇到了Sparksql所支持的函数太少了的难 ...

  5. SQL触发器实例讲解1

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常见的触发器有三种:分别应 ...

  6. SQL触发器实例讲解

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常见的触发器有三种:分别应用于Insert , ...

  7. SQL触发器实例讲解(本文是来自百度文库)

    我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分享下给大家. 定义: 何为触发器?在SQL Server里面也就是对某一 ...

  8. SQL触发器实例讲解(转)

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.       常见的触发器有三种:分别应用于Insert , ...

  9. SQL Server 触发器 详细讲解

    最近在做微信活动,需要用到存储过程,在网上找了下感觉使用触发器更好些,和大家分享下 希望对你有用. 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动 ...

最新文章

  1. 利用Use Case为系统行为建模(1)
  2. 针对IE6\7\8\9\10浏览器的CSS hack大全详解
  3. js在for循环中绑定事件
  4. [Python人工智能] 二十八.Keras深度学习中文文本分类万字总结(CNN、TextCNN、LSTM、BiLSTM、BiLSTM+Attention)
  5. ipv4到ipv6的过渡
  6. pyqt5与html数据交互原理,pyqt5与本地html进行js交互
  7. C++函数参数的规则
  8. tcp流式传输_收听互联网广播以及下载和流式传输免费音乐的最佳网站
  9. 什么耳机适合跑步、挑选五款最佳的跑步耳机推荐
  10. pictures for my GitHub -- Convenient Pic's URL offering
  11. 原生js判断IE浏览器版本
  12. 分享一下我的一些学习方法
  13. 关于jQuery中的SuperSlide插件的使用
  14. 尝鲜用 React Hook + Parcel 构建真心话大冒险简单页面
  15. 教务系统一键评教案例分析
  16. oracle自来水boss建表语句,SQL语句(建库、建表、修改语句)
  17. 数据库大批量SQL插入性能优化
  18. 【Nodejs】外研社小学英语教材一年级起各年级英语音频下载(全)
  19. html字体怎么是什么属性,你不知道的CSS字体属性
  20. 可以关闭Telephony 服务吗

热门文章

  1. C++/C--set常见用法详解【转载】
  2. 一文搞懂C语言回调函数
  3. Markdown--编辑表格与矩阵
  4. 创建一个守护进程来监听服务进程的异常状态_用 C# 来守护 Python 进程
  5. k8s包管理器helm_是时候使用Helm了:Helm, Kubernetes的包管理工具
  6. java 504错误怎么解决_求助java.lang.NoClassDefFoundError怎么解决,报错信息如下
  7. mysql索引类型 优劣_Mysql索引的类型和优缺点详解
  8. Struts2增删改查 myeclipse开发文档加项目源码及eclipse开发项目源码
  9. java 反射类成员_java 反射(二)类成员
  10. 影响线型缩聚物分子量的因素_高分子化学试题