1 / 17
文档名称:

SQL触发器使用及语法.docx

格式:docx   大小:33KB   页数:17页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

SQL触发器使用及语法.docx

上传人:天随人愿的夏天 2022/1/7 文件大小:33 KB

下载得到文件列表

SQL触发器使用及语法.docx

相关文档

文档介绍

文档介绍:精品文档
精品文档
1
精品文档
===
定义:何为触发器?在SQLServer里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于
Insert,Update,Delete事件。
我为什么要使用触发器?比如,这么两个表:
CreateTableStudent(
--学生表
StudentIDintprimarykey,
--学号
....
)
CreateTableBorrowRecord(
--学生借书记录表
BorrowRecord
intidentity(1,1),
--流水号
StudentID
int,
--学号
BorrowDate
datetime,
--借出时间
ReturnDAte
Datetime,
--归还时间
...
)
用到的功能有:
精品文档
精品文档
2
精品文档
,我希望他的借书记录仍然与这个学生相关 (也就是同时更改借书记录表的学
号);
,我希望删除他的学号的同时,也删除它的借书记录。
等等。
这时候可以用到触发器。对于 1,创建一个 Update触发器:
CreateTriggertruStudent
OnStudent

--在Student

表中创建触发器
精品文档
精品文档
16
精品文档
forUpdate

--为什么事件触发
精品文档
精品文档
16
精品文档
As

--事件触发后所要做的事情
精品文档
精品文档
16
精品文档
ifUpdate(StudentID)
begin
精品文档
精品文档
16
精品文档
UpdateBorrowRecord
SetStudentID=
精品文档
精品文档
16
精品文档
FromBorrowRecordbr,Deleted

d,Insertedi

--Deleted

和Inserted

临时表
精品文档
精品文档
16
精品文档
=
精品文档
精品文档
16
精品文档
end
精品文档
精品文档
10
精品文档
理解触发器里面的两个临时的表: Deleted,Inserted 。注意Deleted
的一条记录”和“新的一条记录”。
一个数据库系统中有两个虚拟表用于存储在表中记录改动的信息,分别是:
虚拟表Inserted 虚拟表Deleted

与Inserted

分别表示触发事件的表

“旧
精品文档
精品文档
16
精品文档
在表记录新增时存放新增的记录修改时存放用来更新的新记录删除时不存储记录

不存储记录
存放更新前的记录
存放被删除的记录
精品文档
精品文档
16
精品文档
一个Update 的过程可以看作为:生成新的记录到 Inserted表,复制旧的记录到 Deleted表,然后删除
Student记录并写入新纪录。
对于2,创建一个 Delete触发器
CreatetriggertrdStudent
OnStudent
forDelete
As
DeleteBorrowRecord
FromBorrowRecordbr,Deltedd
=
从这两个例子我们可以看到了触发器的关键: ;。
SQL触发器实例 2
/*
建立虚拟测试环境,包含:表 [卷烟库存表],表[卷烟销售表]。
请大家注意跟踪这两个表的数据,体会触发器到底执行了什么业务逻辑,对数据有什么影响。
为了能更清晰的表述触发器的作用,表结构存在数据冗余,且不符合第三范式,这里特此说明。
*/
USEMaster
GO
IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHEREXTYPE=’U’ANDNAME=’ 卷烟库存表’)
DROPTABLE 卷烟库存表
GO
IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHEREXTYPE=’U’ANDNAME=’ 卷烟销售表’)
精品文档
精品文档
16
精品文档
DROPTA