触发器

                                     (理论)

【英文】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

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 35
    评论
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值