SQL触发器实例

SQL触发器实例

常见的触发器有三种:分别应用于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.触发机制。

时间: 2024-10-03 14:44:42

SQL触发器实例的相关文章

SQL触发器实例讲解

SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.  常见的触发器有三种:分别应用于Insert , Update , Delete 事件.  我为什么要使用触发器?比如,这么两个表: 复制代码代码如下: Create Table Student( --学生表  StudentID int primary key, --学号  ....  )  Create Table BorrowRec

SQL触发器实例讲解_MsSql

SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: 复制代码 代码如下: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord(

sqlserver 触发器实例代码

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: 复制代码 代码如下: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表

sqlserver 触发器实例代码_MsSql

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: 复制代码 代码如下: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( --学生借书记录表

SQL Server 触发器实例详解_MsSql

Microsoft SQL Server 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器.触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程.触发器一般用在check约束更加复杂的约束上面.触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作.诸如:update.insert.delet

php实现文本数据导入SQL SERVER_php实例

我测试是支持的CSV,SQL,TXT 其实其他格式也可以,只不过我用不到而已 速度是差不多是每秒一万吧 <?php set_time_limit(0); ignore_user_abort(true); include('sgk.php'); echo "<br><br>"; ?> <?php function array_iconv($data,$output = 'GBK') { $encode_arr = array('UTF-8','A

sql触发器的用法

sql触发器的用法 触发器:是一种特殊类型的存储过程,不由用户直接调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(Insert,Delete,Update).创建触发器时会对其进行定义,以便在对特定表或列做特定类型的数据修改时执行.   使用触发器的优点:1.触发器是MySQL服务器上自动提供的                            2.触发器可以查询多张表,而且可以包含复杂的SQL语句.   以一个牛腩新闻系统上的一个例子简单介绍触发器的使用:         

HOW TO:在 SQL Server 实例之间传输登录和密码

server 概要在将数据库移动到新服务器后,用户可能无法登录到新服务器.相反,他们会收到下面的错误信息: Msg 18456, Level 16, State 1Login failed for user '%ls'. 您必须将登录和密码传输到新服务器.本文介绍如何向新服务器传输登录和密码. 返回页首如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码SQL Server 7.0 数据转换服务 (DTS) 对象传输功能可在两台服务器之间传输登录和用户,但它不传输 SQL Se

如何使用SQL触发器进行备份数据库?

sql|触发器|备份|数据库 首先,你需要建立测试数据表,一个用于插入数据:test3,另外一个作为备份:test3_bak 以下是引用片段为例: create table test3(id int primary key not null identity(1,1),uname varchar(20),uage int); create table test3_bak(id int primary key not null identity(1,1),bid int,uname varchar