触发器教学案例

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

INSERT 触发器的工作方式
INSERT 触发器的工作过程 • 在定义了 INSERT 触发器的表上执行 INSERT 语句 • 新行被同时增加到触发器表和 inserted 表 中, inserted 表保存了插入行的副本 • 触发器动作被执行
示例:在定义了 INSERT 触发器的表上执行 INSERT 语句 insert into student values('0701004','张明',' 男','1987-02-24', '0701') stu_id
0701001
stu_ stu_sex name
李玉 女
stu_ birthday
1987-05-06
class_id
0701
0701002
鲁敏

1988-06-28
0701

0701004

张明



1987-02-24
…Байду номын сангаас
0701
INSERT 语句插入的行被记录下来
inserted
0701004 张明 男 1987-02-24 0701
教学案例
触发器的工作过程
触发器的工作过程
SQL Server为每个触发器都创建了两个专用临 时表: • INSERTED表和DELETED表 • 两个表用户不能进行修改,只能在触发器程 序中查询表中的内容。 • 触发器执行完毕后,与该触发器相关的这两 个表也会被删除。
触发器的工作过程
当执行 INSERT 语句时, INSERTED 表存放要向 表中插入的所有行。 当执行 DELETE 语句时, DELETED 表存放要从 表中删除的所有行。 当 执 行 UPDATE 语 句 时 , 旧 的 行 被 移 动 到 DELETED表,而新的行插入到INSERTED表。
class_id
0701 0701

0701004

张明



1987-02-24

0701
DELETE 语句删除的行被记录下来
deleted
0701004 张明 男 1987-02-24 0701
触发器代码
CREATE TRIGGER stu_delete1 ON student AFTER DELETE AS declare @classid char(6) select @classid=class_id from deleted UPDATE UPDATEclass classSET SET class_num=class_num-1 class_num=class_num-1 where whereclass_id=@classid class_id=@classid
触发器代码
CREATE TRIGGER stu_insert1 ON student AFTER INSERT AS declare @classid char(6) select @classid=class_id from inserted UPDATE UPDATEclass classSET SET class_num=class_num+1 class_num=class_num+1 where whereclass_id=@classid class_id=@classid
DELETE 语句删除的行被记录下来 deleted 0704002
周晓

1989-04-27
0704
0704003 易国梁 0704004 季风
男 男
1988-11-26 1987-09-21
0704 0704
触发器代码
CREATE TRIGGER stu_delete2 ON student AFTER DELETE AS declare @classid char(6) select @classid=class_id from deleted UPDATE UPDATEclass classSET SET class_num=class_num-(select class_num=class_num-(select count(*) count(*) from fromdeleted) deleted) where whereclass_id=@classid class_id=@classid
示例1:在定义了 DELETE 触发器的表上执行 DELETE 语句 delete from student where stu_id='0701004' stu_id
0701001 0701002
stu_ stu_sex name
李玉 鲁敏 女 女
stu_ birthday
1987-05-06 1988-06-28
class_id
0701 0702 0703 0704
class_name
软件开发 计算机办公应用 网络技术 张明数字媒体
class_num
3 4 2 1 4
思考
一次性插入若干条同一专业的学生 一次性插入若干条不同专业的学生 问:触发器如何定义?
一次性插入若干条相同专业的学生 触发器参考定义 CREATE TRIGGER stu_insert2 ON student AFTER INSERT AS declare @classid char(6) select @classid=class_id from inserted UPDATE class SET class_num=class_num+(select count(*) from inserted) where class_id=@classid
DELETE 触发器的工作方式
DELETE 触发器的工作过程
• 在定义了 DELETE 触发器的表上执行 DELETE 语句
• DELETE 语句删除的行被记录下来,放入 deleted 表,deleted 表是保存了被删除行 的副本 • 触发器动作被执行
注:当行添加到 deleted 表后,将不再存在于数据库表中
class_id
0701 0702 0703 0704
class_name
软件开发 计算机办公应用 网络技术 张明数字媒体
class_num
4 3 2 1 4
示例2:在定义了 DELETE 触发器的表上执行 DELETE 语句
delete from student where stu_sex='男' and class_id='0704'
相关文档
最新文档