数据库原理-第五章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
5.6 触发器
定义触发器 激活触发器 删除触发器 Sqlserver2005中的触发器
9
激活触发器
触发器的执行,是由触发事件激活的,并由数据 库服务器自动执行。
一个数据表上可能定义了多个触发器同一个表上 的多个触发器激活时遵循如下的执行顺序:
• (1) 执行该表上的BEFORE触发器; • (2) 激活触发器的SQL语句; • (3) 执行该表上的AFTER触发器。 • 同一个表上的多个BEFORE(AFTER)触发器的执行
7
• [例19]续
– CREATE TRIGGER Update_Sal AFTER UPDATE ON Teacher FOR EACH ROW AS BEGIN IF (new.Sal <> old.Sal) THEN INSERT INTO Sal_log VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP); END IF; END;
和操作,具有更精细和更强大的数据控制能力。
触发器的定义
• CREATE TRIGGER语法格式
– CREATE TRIGGER <触发器名> <BEFORE | AFTER> <触发事件> ON <表名> FOR EACH <ROW | STATEMENT>
[WHEN <触发条件>] <触发动作体>
– CREATE TRIGGER Insert_Sal AFTER INSERT ON Teacher FOR EACH ROW AS BEGIN INSERT INTO Sal_log VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP); END;
数据库原理
主讲人:王子健
1
第五章 数据库完整性
实体完整性 参照完整性 用户自定义的完整性 完整性约束命名子句 触发器
2
5.6 触发器
定义触发器 激活触发器 删除触发器 Sqlserver2005中的触发器
3
定义触发器
触发器是什么?
• 触发器是用户定义在关系表中的一类由事件驱动的特殊过程。 • 表中数据的增、删、改操作是激活触发器的事件。 • 触发器可以实施比foreign key约束、check约束更为复杂的检查
– DROP TRIGGER Insert_Sal ON Teacher;
12
5.6 触发器
定义触发器 激活触发器 删除触发器 Sqlserver2005中的触发器
13
Sqlserver2005中的触发器 触发器是什么?
• 触发器是用户定义在关系表中的一类由事件驱动的特殊 过程。
Ename='陈平';” – 执行触发器Insert_Sal; – 执行触发器Update_Sal
11
Fra Baidu bibliotek
删除触发器
删除触发器的SQL语法:
• DROP TRIGGER <触发器名> ON <表名>; • 触发器必须是一个已经创建的触发器,并且只能由具有
相应权限的用户删除。 • [例21] 删除教师表Teacher上的触发器Insert_Sal
14
Sqlserver2005中的触发器 触发器的定义?
• 在定义触发器时应指定触发器的:
– 名称 – 目标表格 – 触发事件 – 类型(执行动作体的方式) – 动作体(过程块)
4
定义触发器
触发器的定义
• 语法详解
– 创建者:表的拥有者 – 触发器名:为触发器命名 – 表名:触发器的目标表的名字 – 触发事件:INSERT、DELETE、UPDATE或它们的组合 – 触发器的类型:行级触发器和语句级触发器 – 触发条件:触发器被激活时,根据该条件判断是否执行<触发动作体
• [例18] 定义一个BEFORE行级触发器,为教师表Teacher定义 完整性规则“教授的工资不得低于4000元,如果低于4000元,自 动改为4000元”。
– CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher FOR EACH ROW AS BEGIN IF ( new.Job = '教授' ) AND (new.Sal < 4000) THEN new.Sal := 4000; END IF; END;
• 在执行某些特定的SQL语句(触发特定事件)时自动执 行。
• 表的创建,修改,删除是激发触发器的事件(DDL触发 器)
• 表中数据的增、删、改操作是激活触发器的事件 (DML触发器)。
• 触发器可以实施比foreign key约束、check约束更为 复杂的检查和操作,具有更精细和更强大的数据控制能 力。
6
• [例19]定义AFTER行级触发器,当教师表Teacher的工资发生变化后就 自动在工资变化表Sal_log中增加一条相应记录
• 首先建立工资变化表Sal_log
– CREATE TABLE Sal_log ( Eno NUMERIC(4) references teacher(eno) Sal NUMERIC(7,2), Username char(10), Date TIMESTAMP );
顺序:
– 遵循“谁先创建,谁先执行”的原则 – 按字母顺序
10
激活触发器
例题
• [例20]执行修改某个教师工资的SQL语句,激活上 述定义的触发器。
– UPDATE Teacher SET Sal=800 WHERE Ename='陈平';
• 执行顺序是:
– 执行触发器Insert_Or_Update_Sal – 执行SQL语句“UPDATE Teacher SET Sal=800 WHERE
> – 触发动作条:是一个匿名过程块,或是对以创建存储过程的调用。
如果是行级触发器,用户可以在过程体中使用NEW和OLD引用 UPDATE/INSERT事件之后的新值和UPDATE/DELETE事件之前的 旧值。如果是语句级触发器则不能在动作体中使用NEW或OLD进行 引用。
5
定义触发器
触发器的定义
相关文档
最新文档