20项目8 以程序方式处理学生信息管理数据表-3触发器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
USE gradem; CREATE TABLE delteacher SELECT tno,tname FROM teacher WHERE 1=0; CREATE TRIGGER trig_teacher
AFTER DELETE ON teacher FOR EACH ROW INSERT INTO delteacher(tno,tname) values(old.tno, old.tname);
任务8-3 创建和使用触发器
在触发器的SQL语句中,可以关联表中的任何列,通过使 用OLD和NEW列名来标识,如OLD.col_name、 NEW.col_name。OLD.col_name关联现有的行的一列在被更 新或删除前的值。NEW.col_name关联一个新行的插入或更 新现有的行的一列的值。
USE gradem; CREATE TRIGGER trig_classnum AFTER INSERT ON student FOR EACH ROW UPDATE class SET number=number+1 WHERE classno = left(new.sno,8);
Baidu Nhomakorabea
任务8-3 创建和使用触发器
任务8-3 创建和使用触发器
❖ (二)创建触发器
1.利用命令创建触发器 因为触发器是一种特殊的存储过程,所以触发器的创建 和存储过程的创建方式有很多相似之处,其基本语法格式如 下。 CREATE TRIGGER trigger_name trigger_time trigger_event
ON tb_name FOR EACH ROW trigger_statement;
+----------------+
| 插入前班级人数 |
+----------------+
|
47 |
+----------------+
1 row in set
INSERT INTO student(sno,sname,ssex) VALUES('2007030148','李勇','男');
SELECT number as 插入后班级人数 FROM class WHERE classno='20070301';
对于INSERT语句,只有NEW是合法的。对于DELETE语 句,只有OLD是合法的。对于UPDATE语句,NEW和OLD可 以同时使用。
任务8-3 创建和使用触发器
【例8.20】 在gradem数据库中,当向student表添加一条学 生信息时,同时还需要更新class表中的“classnumber”列。 通过创建一个INSERT触发器,在用户每次向student表中添 加新的学生信息时便更新相应的班级的人数。这个触发器的名 称为“trig_classnum”,如何实现呢?
存储过程/存储函数的定义? 存储过程/存储函数的创建方法? 存储过程的调用方法? 存储函数的调用方法?
任务8-3 创建和使用触发器
❖ 【任务分析】
为了确保数据完整性,设计人员可以用触发器实现更加复杂 的业务规则。
❖ 【课堂任务】
本次任务要求掌握触发器的概念及应用。 触发器的概念 创建触发器 查看触发器 删除触发器
接下来,使用INSERT语句插入一条新的学生信息,以验证触发器是否会自动执行。这
里由于触发器基于student表,因此插入也针对此表,在INSERT语句之前之后各添加一条
SELECT语句,比较一下插入记录前后处理状态的变化。
SELECT number as 插入前班级人数 FROM class WHERE classno='20070301';
任务8-3 创建和使用触发器
【例8.22】 创建一个触发器,当student表中的学生学号 发生变更时,同时更新sc表中的相应的学生学号信息。
DELIMITER && CREATE TRIGGER trig_snoupdate
AFTER UPDATE ON student FOR EACH ROW BEGIN
IF new.sno!=old.sno THEN UPDATE sc SET sno=new.sno WHERE sno =old.sno;
END IF; END && 更改某一同学的学号,然后查看sc表中相应的学号是否随之改变
任务8-3 创建和使用触发器
任务8-3 创建和使用触发器
❖ (一)触发器概述
触发器(Trigger)是一种特殊的存储过程,它与表紧密 相连,可以是表定义的一部分。当预定义的事件(如用户修改 指定表或者视图中的数据时)发生时,触发器将会自动执行。
触发器基于一个表创建,但是可以针对多个表进行操作。 所以触发器可以用来对表实施复杂的完整性约束,当触发器所 保存的数据发生改变时,触发器被自动激活,从而防止对数据 进行不正确的修改。
《MySQL数据库原理及应用》
项目8 以程序方式处理学生信息管理数据表
❖学习目标:
了解SQL编程基础、游标、存储过程和函数、触发器 及事务的作用 掌握游标、存储过程和函数、触发器及事务的创建 方法 掌握游标、存储过程和函数、触发器及事务的修改 及删除方法
任务8-3 创建和使用触发器 ❖ 【复习回顾】
+----------------+
| 插入后班级人数 |
+----------------+
|
48 |
+----------------+
1 row in set
任务8-3 创建和使用触发器
【例8.21】 在gradem数据库的teacher表中,定义 一个触发器,当一个教师的信息被删除时,把该教师的 编号和姓名添加到delteacher表中。如何实现呢?
任务8-3 创建和使用触发器
❖ 触发器的优点如下所述:
(1)触发器自动执行,在表的数据做了任何修改(比如 手工输入或者使用程序采集的操作)之后立即激活。
(2)触发器可以通过数据库中的相关表进行层叠更改。 这比直接把代码写在前台的做法更安全合理。
(3)触发器可以强制限制,这些限制比用CHECK约束所 定义的更复杂。与CHECK约束不同的是,触发器可以引用其 他表中的列。
AFTER DELETE ON teacher FOR EACH ROW INSERT INTO delteacher(tno,tname) values(old.tno, old.tname);
任务8-3 创建和使用触发器
在触发器的SQL语句中,可以关联表中的任何列,通过使 用OLD和NEW列名来标识,如OLD.col_name、 NEW.col_name。OLD.col_name关联现有的行的一列在被更 新或删除前的值。NEW.col_name关联一个新行的插入或更 新现有的行的一列的值。
USE gradem; CREATE TRIGGER trig_classnum AFTER INSERT ON student FOR EACH ROW UPDATE class SET number=number+1 WHERE classno = left(new.sno,8);
Baidu Nhomakorabea
任务8-3 创建和使用触发器
任务8-3 创建和使用触发器
❖ (二)创建触发器
1.利用命令创建触发器 因为触发器是一种特殊的存储过程,所以触发器的创建 和存储过程的创建方式有很多相似之处,其基本语法格式如 下。 CREATE TRIGGER trigger_name trigger_time trigger_event
ON tb_name FOR EACH ROW trigger_statement;
+----------------+
| 插入前班级人数 |
+----------------+
|
47 |
+----------------+
1 row in set
INSERT INTO student(sno,sname,ssex) VALUES('2007030148','李勇','男');
SELECT number as 插入后班级人数 FROM class WHERE classno='20070301';
对于INSERT语句,只有NEW是合法的。对于DELETE语 句,只有OLD是合法的。对于UPDATE语句,NEW和OLD可 以同时使用。
任务8-3 创建和使用触发器
【例8.20】 在gradem数据库中,当向student表添加一条学 生信息时,同时还需要更新class表中的“classnumber”列。 通过创建一个INSERT触发器,在用户每次向student表中添 加新的学生信息时便更新相应的班级的人数。这个触发器的名 称为“trig_classnum”,如何实现呢?
存储过程/存储函数的定义? 存储过程/存储函数的创建方法? 存储过程的调用方法? 存储函数的调用方法?
任务8-3 创建和使用触发器
❖ 【任务分析】
为了确保数据完整性,设计人员可以用触发器实现更加复杂 的业务规则。
❖ 【课堂任务】
本次任务要求掌握触发器的概念及应用。 触发器的概念 创建触发器 查看触发器 删除触发器
接下来,使用INSERT语句插入一条新的学生信息,以验证触发器是否会自动执行。这
里由于触发器基于student表,因此插入也针对此表,在INSERT语句之前之后各添加一条
SELECT语句,比较一下插入记录前后处理状态的变化。
SELECT number as 插入前班级人数 FROM class WHERE classno='20070301';
任务8-3 创建和使用触发器
【例8.22】 创建一个触发器,当student表中的学生学号 发生变更时,同时更新sc表中的相应的学生学号信息。
DELIMITER && CREATE TRIGGER trig_snoupdate
AFTER UPDATE ON student FOR EACH ROW BEGIN
IF new.sno!=old.sno THEN UPDATE sc SET sno=new.sno WHERE sno =old.sno;
END IF; END && 更改某一同学的学号,然后查看sc表中相应的学号是否随之改变
任务8-3 创建和使用触发器
任务8-3 创建和使用触发器
❖ (一)触发器概述
触发器(Trigger)是一种特殊的存储过程,它与表紧密 相连,可以是表定义的一部分。当预定义的事件(如用户修改 指定表或者视图中的数据时)发生时,触发器将会自动执行。
触发器基于一个表创建,但是可以针对多个表进行操作。 所以触发器可以用来对表实施复杂的完整性约束,当触发器所 保存的数据发生改变时,触发器被自动激活,从而防止对数据 进行不正确的修改。
《MySQL数据库原理及应用》
项目8 以程序方式处理学生信息管理数据表
❖学习目标:
了解SQL编程基础、游标、存储过程和函数、触发器 及事务的作用 掌握游标、存储过程和函数、触发器及事务的创建 方法 掌握游标、存储过程和函数、触发器及事务的修改 及删除方法
任务8-3 创建和使用触发器 ❖ 【复习回顾】
+----------------+
| 插入后班级人数 |
+----------------+
|
48 |
+----------------+
1 row in set
任务8-3 创建和使用触发器
【例8.21】 在gradem数据库的teacher表中,定义 一个触发器,当一个教师的信息被删除时,把该教师的 编号和姓名添加到delteacher表中。如何实现呢?
任务8-3 创建和使用触发器
❖ 触发器的优点如下所述:
(1)触发器自动执行,在表的数据做了任何修改(比如 手工输入或者使用程序采集的操作)之后立即激活。
(2)触发器可以通过数据库中的相关表进行层叠更改。 这比直接把代码写在前台的做法更安全合理。
(3)触发器可以强制限制,这些限制比用CHECK约束所 定义的更复杂。与CHECK约束不同的是,触发器可以引用其 他表中的列。