Sql Server 触发器实现多表之间同步增加、删除与更新

开课吧开课吧锤锤2021-02-05 10:17

Sql Server 触发器实现多表之间同步增加、删除与更新

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。

     常见的触发器有三种:分别应用于Insert , Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)

开课吧广场Java教程

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

     Create Table Student(             --学生表

       StudentID int primary key,      --学号

       ....

      )

     Create Table BorrowRecord(              --学生借书记录表

       BorrowRecord  int identity(1,1),      --流水号  

       StudentID     int ,                   --学号

       BorrowDate    datetime,               --借出时间

       ReturnDAte    Datetime,               --归还时间

       ...

     )

分别创建增加、删除、更新的触发器(Trigger)来达到两张表之间数据同步的目的。

1:数据同步增加:

如有两张表——A表和B表,创建触发器使当A表插入数据后B表也同步插入数据。其中B表插入数据的字段需要同A表中的字段相对应。

CREATE TRIGGER 触发器名称 

ON A表

AFTER INSERT 

AS BEGIN INSERT INTO 

B表(B表字段1,B表字段2,B表字段3)

SELECT A表字段1,A表字段2,A表字段3 

FROM INSERTED

END

2.数据同步删除:

如有两张表——A表和B表,创建触发器使当A表删除数据后B表也同步删除数据。其中B表与A表应有相应主键关联。

CREATE TRIGGER 触发器名称 

ON A表 

AFTER DELETE 

AS BEGIN DELETE B表 

WHERE 

B表主键 IN( 

SELECT A表主键

FROM DELETED) 

END

3.数据同步更新:

如有两张表——A表和B表,创建触发器使当A表数据更新后B表也同步更新数据。

CREATE TRIGGER 触发器名称

ON A表 

AFTER UPDATE 

AS 

update B表

SET 

B.B表字段1=A.A表字段1  

FROM

B表 AS B,INSERTED AS A   

WHERE B.B表主键=A.A表主键

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

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

    这里我们只讲解最简单的触发器,复杂的容后说明。

Java是一门优秀的编程语言,应用广泛,可以做网站、软件、手机游戏、中间件以及现在流行的安卓手机app等,发展前景很可观,有对Java感兴趣的同学就赶快学习起来吧。以上就是小编今天为大家整理发布的“Java开发心得:Sql Server 触发器实现多表之间同步增加、删除与更新 ”一文,希望为正在学习Java语言的朋友提供学习参考,更多Java教程相关内容尽在开课吧广场Java教程频道!

有用
分享