重新回顾牛腩视频的时候,感觉自己对操作数据库,依然有些小问题,不能很顺利的创建触发器,对触发器的了解不是很多,然后自己就开始,复习一下触发器。
触发器(trigger)是一个特殊的存储过程,它的执行不是程序调用,也不是手动启动,而是由事件来触发,比如对一个表进行(insert,delete,update)时就会激活执行它,触发器经常用于加强数据的完整性和业务规则等。
触发程序时与表有关的命名数据库对象,当表上出现特定的事件时,将激活该对象。
1, 处罚程序与命名为tbl_name的表相关,tbl_name必须引用永久性表,不能将触发程序与临时表和视图关联起来,。
2, Trigger_time是触发程序的动作时间,它可以是before或after以及instead of,指明触发程序是在激活它的语句之前或之后触发。
3, Trigger_event指明了激活触发程序的语句类型,即:(insert,delete,update)insert表示将新行插入表中的时候激活该触发程序。Delete表示在删除的时候触发,update表示在更新的时候触发程序。
触发器的语法:
CREATE TRRIGGER trigger_name --创建一个触发程序,名字
ON{table|view} --在哪个表上建立触发器
[WITH ENCRYPTION] --是否加密
{{FOR|AFTER|INSTEAD OF}{[INSET],[DELETE],[UPDATE]}} –什么时候触发
AS
[If Update()]
Begin --如果操作成功就执行,语句
--所执行的语句
End
Insert、update、delete:激活触发器的三种操作,可以同时执行,也可以任选其一。
deleted 与inserted 数据的差异
FromBorrowRecord br , Deleted d ,Insertedi --Deleted和Inserted临时表
Inserted
存放进行insert和update 操作后的数据
Deleted
存放进行delete 和update操作前的数据
注意:update 操作相当于先进行delete 再进行insert,所以在进行update操作时,修改前的数据拷贝一条到deleted表中,修改后
的数据在存到触发器作用的表的同时,也同时生成一条拷贝到insered表中
更新update触发
一,1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
这时候可以用到触发器。对于1,创建一个Update触发器:
Create Trigger truStudent
OnStudent --在Student表中创建触发器
forUpdate --为什么事件触发
As --事件触发后所要做的事情
ifUpdate(StudentID)
begin
Update BorrowRecord
SetStudentID=i.StudentID
From BorrowRecordbr , Deleted d ,Inserted i --Deleted和Inserted临时表
Wherebr.StudentID=d.StudentID
end
二,对于2,创建一个Delete触发器
2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Deltedd
Where br.StudentID=d.StudentID
end
三,创建一个insert触发器
if exists(select * from sysobjects wherename=‘add_gy ' and type='tr')
droptrigger add_gy
go --之上的代码表示,如果触发器已经存在,则删除
create trigger add_gy on 供应
after insert
as
declare @tx varchar(30),@sl real
select @tx=条形码,@sl=供应数量 from inserted
update 商品 set 库存数量=库存数量+@sl where 条形码=@tx
--运行后查看供应表下的触发器add_gy已存在。