码迷,mamicode.com
首页 > 其他好文 > 详细

触发器

时间:2015-03-14 17:06:20      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:select   数据   

                                     (理论)

【英文】Trigger

【定义】是一个能有系统自动执行对数据库修改的语句。

【用途】

1、主键和外键等约束不能保证的复杂的参照完整性和数据一致性

2、对数据库进行级联修改

3、实现比Check约束更为复杂的限制

4、比较数据修改前后的差别

5、强制表的修改要合乎业务规则

【语法结构】

注:

  【触发器响应类型】

   1、后触发器(AfterTrigger)

  •  After和For相同
  •  触发事件完成之后,才执行触发器中定义的语句。
  •  After触发器只能在表上定义
  •  在同一个数据表中可以创建多个After触发器
  •  默认创建的为After触发器

  2、前触发器(insteadof Trigger)

  •  在触发事件发生之后,并不去做触发事件,而是去执行触发器定义的语句操作。也可以这么认为,触发器定义  的操作取代了触发事件的操作。
  •  Instead of触发器可以在表或视图上定义
  •  在同一个表或视图上,每个Update、Insert和Delete语句最多只可以定义一个InsteadOf触发器。

  【特殊表】

  •   当触发器引用视图或者临时表,并产生两个特殊的表:delete表和inserted表
  •   执行Insert 语句或Update语句向表中插入数据行时,插入到触发器表中的行作为副本同时被插入到Inserted   表中。
  •   执行Delete语句删除表中的数据时,表中被删除的行作为副本被插入到Delete表中。
  •   执行Update语句修改数据时,先删除表中的旧行,并将该旧行插入到Delete表中,再插入新行,同时将新行插   入到Inserted 表中。

 

                                       (入门实例)

【使用触发器实现复杂的参照完整性和数据一致性】

例:若修改SC中一个记录的学号,则要检查S中是否存在与该学号相同的记录,若有则不允许修改,若没有则可以修改.


CREATE TRIGGER TRIGGER_SC ON [dbo].[sc]

FOR UPDATE

AS

IF UPDATE(SNO)

 BEGIN

DECLARE @SNO_NEW CHAR(2)   ,@SNO_OLD CHAR(2),@SNO_CNT INT

SELECT @SNO_OLD=SNO FROM DELETED

SELECT @SNO_CNT=COUNT(*) FROM S

WHERE SNO=@SNO_OLD

IF @SNO_CNT<>0

 ROLLBACK TRANSACTION

END

【使用触发器对数据库进行级联修改】

例:若修改表S中一学生的学号,则表SC中与该学生相关的学号被自动修改.


CREATE TRIGGER TRIGGER_S ON [dbo].[s]

FOR UPDATE

AS

  IFUPDATE(SNO)

 BEGIN

DECLARE @SNO_NEW CHAR(2)   ,@SNO_OLD CHAR(2)

SELECT @SNO_NEW=SNO FROM INSERTED

SELECT @SNO_OLD=SNO FROM DELETED

UPDATE SC SET SNO=@SNO_NEW

WHERE SNO=@SNO_OLD

END

【使用触发器实现比CHECK约束更为复杂的限制】

例:为SC表创建一触发器,当插入一个记录或修改成绩时,确保此记录的成绩为0—100分.


CREATE TRIGGER TRIGGER_SC1 ON [dbo].[sc]

FOR INSERT, UPDATE

AS

DECLARE @SCORE TINYINT

SELECT @SCORE=SCORE FROM INSERTED

IF @SCORE>0 AND @SCORE<=100

 BEGIN

    PRINT ‘操作完成‘

 return

  end

print ‘成绩超出0-100‘

rollback transaction

 

 

 

触发器

标签:select   数据   

原文地址:http://blog.csdn.net/cxl0921/article/details/44259825

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!