触发器

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

Page 6/31
触发insert触发器
【例】向xs表里插入一条数据
insert into xs(学号,姓名,专业名,性别,出生 时间,总学分) values (‘001101’,‘王林’,‘计算机’,‘男’, ‘1980-02-10’,50) 执行后,弹出提示: 你已经向xs表里插入了一条纪录!
Page 2/31
DML触发器的创建和应用 触发器的创建和应用
当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触 发器。从而确保对数据的处理必须符合由这些SQL语句所定义 发器。从而确保对数据的处理必须符合由这些 语句所定义 的规则。 的规则。 DML 触发器的主要优点如下: 触发器的主要优点如下: 触发器可通过数据库中的相关表实现级联更改。 (1)DML 触发器可通过数据库中的相关表实现级联更改。例 ) 列上写入一个删除触发器, 如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使 其他表中的各匹配行采取删除操作。 其他表中的各匹配行采取删除操作。该触发器用 title_id 列作为 惟一键, 惟一键,在 titleauthor、sales 及 roysched 表中对各匹配行 、 进行定位。 进行定位。 (2)DML 触发器可以防止恶意或错误的 INSERT、UPDATE ) 、 操作, 以及 DELETE 操作,并强制执行比 CHECK 约束定义的限制更 为复杂的其他限制。 约束不同, 为复杂的其他限制。与 CHECK 约束不同,DML 触发器可以引 用其他表中的列。 用其他表中的列。 触发器可以评估数据修改前后表的状态, (3)DML 触发器可以评估数据修改前后表的状态,并根据该 ) 差异采取措施。 差异采取措施。
Page 25/31
update触发器的过程
xs表 表
学号 001101 姓名 王林 专业名 计算机 性别 男 出生时间 1980-02-10 总学分 50 备注
Deleted表 表
学号 001101 姓名 王林 专业名 计算机 性别 男
触发器的操作与管理
触发器概述
触发器是一种特殊的存储过程, 触发器是一种特殊的存储过程,它在执行语言事件时自动生 效。 SQL Server2005 包括两大类触发器:DML 触发器和 DDL 触 包括两大类触发器: 发器。 发器。 (1)DML 触发器在数据库中发生数据操作语言 (DML) 事件 ) 时将启用。 时将启用。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器 语句、 语句。 可以查询其他表, 语句。 可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将 触发器和触发它的语句作为可在触发器内回滚的单个事务对待。 触发器和触发它的语句作为可在触发器内回滚的单个事务对待。 如果检测到错误(例如,磁盘空间不足), ),则整个事务即自动 如果检测到错误(例如,磁盘空间不足),则整个事务即自动 回滚。 回滚。 的新增功能。 (2)DDL 触发器是 SQL Server 2005 的新增功能。当服务 ) 器或数据库中发生数据定义语言 (DDL) 事件时将调用这些触发 器。
Page 20/31
insert触发器的过程
xs表 表
学号
001102
姓名 程明
专业名 计算机
性别 男
出生时间
1981-02-01
总学分
50
备注
Inserted表 表
学号
001101
Insert into xs values(‘001101’,’王林’,’计算机’,’男’,’1980-02王林’ 计算机’ 王林 计算机 男 10‘,50)
Page 15/31
启用触发器
语法: enable trigger 触发器名 【例】启用tr_insert触发器 use xscj go alter table xs_kc enable trigger tr_insert go
Page 16/31
删除触发器
语法:
drop trigger 触发器名 【例】删除名为tr_insert的触发器 drop trigger tr_insert
Page 12/31
修改delete触发器
【例】在xs表中定义触发器,当修改纪录时弹出消息: 你修改了此表 use xscj go alter trigger reminder_trig on xs for delete as print ‘你修改了此表!’ go
Page 13/31
触发修改的delete触发器
Page 10/31
触发update触发器
【例】更新xs表中姓名为王林学生的备注信息 use xscj go update xs set 备注=‘优秀学生’ from xs where 姓名=‘王林' go ★出现提示:你已经删除了此数据!
Page 11/31
修改触发器
语法: use 数据库名 go alter trigger 触发器名 on 表名 for delete /insert /update as 触发器要执行的操作 go
deleted
Page 18/31
触发器的工作方式
执行触发器时,系统创建了两个特殊的逻辑表: inserted和deleted表,不允许用户直接对它们进行 修改。它们存放在内存中,不存放在数据库中。 当向表中插入数据时,insert触发器触发执行新的记录插入到触 发器表和inserted表中。 当触发一个delete触发器时,被删除的表记录存放到deleted表 中。 修改一条记录等于插入一条新记录,同时删除旧录,表中原始记 录放在deleted中,修改过的记 录插入到inserted表中。
Page 4/31
创建触发器
语法:
use 数据库名 go create trigger 触发器名 on 表名 for insert / delete / update as 触发器要执行的操作 go
Page 5/31
创建insert触发器
【例】在xs表中定义触发器,当插入纪录时弹出消息: 你已经向xs表里插入了一条纪录! use xscj go create trigger tr_insert on xs for insert as print ‘你已经向xs表里插入了一条数据!’ go
Page 19/31
使用触发器时应考虑的因素
多数触发器是后反应的,约束和INSTEADOF触发器是前 反应的。在 触发器定义的表中执行插入、删除或者更 新语句后,触发器执行。 首先检查约束。如果在触发器表上存在约束,则约束在 前检查。如果违反约束,触发器就不执行。 触发器执行
对任何动作都可以有多个触发器。SQL Server 2005允 许在一个表 上嵌套几个触发器。一个表可以定义多个 触发器。每个触发器可 以为一个或几个动作定义。
Page 17/31
触发器的工作原理
SQL Server创建了两个专用表:inserted表和deleted表。这 是两个逻辑表,由系统来维护,不允许用户直接对这两个表进行修 改。它们存放于内存中,不存放在数据库中。这两个表的结构总是 与被该触发器作用的表的结构相同。
InsE语句的执行而导致要加到该触 发表中去的所有新行。即用于插入或更新表的新行值,在插入 或更新表的同时,也将其副本存入insterted表中。因此,在 insterted表中的行总是与触发表中的新行相同 。 存放由于DELETE或UPDATE语句的执行而导致要从该触 发表中删除的所有行。也就是说,把触发表中要删除或要更新 的旧行移到deleted表中。因此,deleted表和触发表不会有相同 的行。
【例】删除姓名为李明的学生的纪录 use xscj delete xs where 姓名='李明' go
Page 14/31
禁用触发器
语法: disable trigger 触发器名 【例】禁用tr_update触发器 use xscj go alter table xs_kc disable trigger tr_update go
Page 22/31
触发Inserted表案例
details]表中插入数据 【例】往[order details]表中插入数据
Use northwind go insert [order details] values(10248,3,10,5,0) go
Page 23/31
delete触发器的过程
Page 7/31
创建delete触发器
【例】对于xscj数据库,如果在xs表中删除数据,则在 执行时显示提示信息。 use xscj go create trigger tr_delete on xs for delete as print ‘你已经删除了此数据!’ go
Page 8/31
触发delete触发器
Page 24/31
deleted表案例
【例】在northwind中,完成删除定单,对应的产品库 northwind中 完成删除定单, 存恢复原数量. 存恢复原数量. use northwind go create trigger tr_delete on [order details] for delete as update products set unitsinstock=unitsinstock+deleted.quantity from deleted join products on deleted.productid=products.productid go
【例】删除xs表中姓名为李明的学生 use xscj delete xs from xs where 姓名=‘王林' go ★出现提示:你已经删除了此数据!
Page 9/31
创建update触发器
【例】对于xscj数据库,如果在xs表中更新数 对于xscj数据库,如果在xs表中更新数 xscj数据库 xs 则在执行时显示提示信息。 据,则在执行时显示提示信息。 use xscj go create trigger tr_update on xs for update as print ‘你已经更新了此数据!’ 你已经更新了此数据! 你已经更新了此数据 go
Page 3/31
DML触发器创建 触发器创建
当创建一个触发器时必须指定如下选项: 当创建一个触发器时必须指定如下选项:
(1)名称; )名称; (2)在其上定义触发器的表; )在其上定义触发器的表; (3)触发器将何时激发; )触发器将何时激发; (4)激活触发器的数据修改语句,有效选项为 INSERT、 )激活触发器的数据修改语句, 、 UPDATE 或 DELETE,多个数据修改语句可激活同一个触发器; ,多个数据修改语句可激活同一个触发器; (5)执行触发操作的编程语句。 )执行触发操作的编程语句。
xs表 表
学号 001101 001102 姓名 王林 程明 专业名 计算机 计算机 性别 男 男 出生时间 1980-02-10 1981-02-01 总学分 50 50 备注
delete xs where 姓名 王林’ 姓名=‘王林 王林’ deleted表 表
学号 001101 姓名 王林 专业名 计算机 性别 男 出生时间 1980-02-10 总学分 50 备注
姓名 王林
专业名 计算机
性别 男
出生时间
1980-02-10
总学分
50
备注
Page 21/31
Inserted表案例
【例】在northwind中,完成往定单表插入数据时,对 northwind中 完成往定单表插入数据时, 应的产品库存相应减少. 应的产品库存相应减少. use northwind go create trigger tr_insert on [order details] for insert as update products set unitsinstock=unitsinstock-inserted.quantity from inserted join products on inserted.productid=products.productid go
相关文档
最新文档