当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 14:53:00  来源:本站整理

SQL Server触发器[MSSQL防范]

赞助商链接



  本文“SQL Server触发器[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

作甚触发器:触发器是数据库服务器中发闹事件时自动履行的特种存储历程,这是帮忙文档上的定义,就认为是一种特别的存储历程也行,常常用于强迫履行业务法则和数据完好性.

在正式操作之前先把触发器原理给说说,理解好触发器的机制是对更好的应用触发器自己好处很明显.

1、原理:

  在履行触发器的历程中会产生两张暂时表INSERTED 和DELETED,这两张表的作用简单说就是拿来记录数据的,主我们可以在触发器履行历程中更好的对数据举行操作

  对表履行INSERT和UPDATE操作时城市在暂时表INSERTED中拷贝一份所增添的数据.

  对表履行DELETE和UPDATE操作时城市在暂时表DELETED中拷贝一份所删除的数据

   对表履行UPDATE操作时,首先把UPDATE前的数据DELETE到DELETED暂时表中,然后再把所要更新的数据插入表中,最后把更新后的数据拷贝到INSERTED暂时表中

触发器分为两种AFTER和INSTEAD OF

2、AFTER

  字面意思就是在对表履行INSERT、UPDATE、DELETE操作后触发的触发器了,这里以INSERT结合触发器原理简单描写其历程

  当有INSERT语句要履行时,首先直接履行INSERT语句,再就是AFTER履行触发器里面的操作(把数据拷贝到暂时表INSERTED中,然后举行我们想要的操作,最后完成一样删除了暂时                    表)

  下面就开始举行实例演示了:

--学生
create table Student
(
 StudentNo int primary key, 
 StudentName varchar(20) not null
)
--书本
create table Book
(
 BookId int identity(1,1),
 BookName varchar(30),
 Owner int foreign key references Student(StudentNo)
)
insert into Student values(1,'ShepherlDeng')
insert into Student values(2,'Divi')
insert into Student values(3,'Lili')
insert into Book values('Book--01',1)
insert into Book values('Book--02',2)
insert into Book values('Book--01',3)
insert into Book values('Book--02',1)
insert into Book values('Book--03',2)
insert into Book values('Book--03',3)
insert into Book values('Book--04',1)
insert into Book values('Book--04',2)
insert into Book values('Book--01',3)

--学生
create table Student
(
 StudentNo int primary key, 
 StudentName varchar(20) not null
)
--书本
create table Book
(
 BookId int identity(1,1),
 BookName varchar(30),
 Owner int foreign key references Student(StudentNo)
)
insert into Student values(1,'ShepherlDeng')
insert into Student values(2,'Divi')
insert into Student values(3,'Lili')
insert into Book values('Book--01',1)
insert into Book values('Book--02',2)
insert into Book values('Book--01',3)
insert into Book values('Book--02',1)
insert into Book values('Book--03',2)
insert into Book values('Book--03',3)
insert into Book values('Book--04',1)
insert into Book values('Book--04',2)
insert into Book values('Book--01',3)

 假如我们有这样一个业务需求,就是当有一个学生时,必须买Book--01这一本书

于是我们可以写个简单的AFTER触发器

CREATE TRIGGER itStudent
on Student
after Insert
as
begin
declare @studentNo int
select @studentNo=StudentNo from Inserted
insert into Book values('Book--01',@studentNo)
end

 当我们增添一条记录时就会自动在Book表中增添一条记录,这里别的操作也很相像所以不多说了只要知道是在操作守后再履行,重点放在INSTEAD OF触发器上.

3、INSTEAD OF

  字面意思为代替,莫非说当在一张表上定义了这样的触发器后,对表所做的INSERT、UPDATE、DELETE操作会被替换掉而不履行了?呵呵…这种触发器履行历程为:

  当对表履行INSERT等操作时,并不直接履行这些操作而是转到触发器里面来履行触发器所定义的操作语句(应当说是一同履行的更符合);

  演示仍旧为上面的所成立的表首先我们演示一个级联删除,当我们在Student表中删除一个被Book引用记录时因为有完好无缺约束我们无法删除这是INSTEAD OF就有作用了 

CREATE TRIGGER dtStudent
on Student
instead of Delete
as
begin
declare @studentNo int
select @studentNo=StudentNo from Deleted
delete Book where Owner=@studentNo
end

呵呵这是不是很爽呢…… 

 那我们再来演示一个UPDATE的INSTEAD OF触发器的操作

Create Trigger utStudent
on Student
instead of Update
as
begin
declare @studentNo int,
            @studentNold int
 if update(StudentNo)
 begin
 select @studentNold=StudentNo from Deleted
 select @studentNo=StudentNo from Inserted
 update Book set Owner=@studentNo where Owner=@studentNold
 end
end

这会是什么后果呢?履行后就会发现当你更改StudentNo是它的子表Book中的Owner也会一同改变了…

我还是认为触发器能办理的仿佛存储历程也可以,从前也用存储历程写级联删除感受要比这个要烦琐点,还有人说触发器是高手用的,总之各有各的利用场景了看怎么用了.   以上是“SQL Server触发器[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .