内容正文:
MySQL数据库应用开发
任务8.1 MySQL触发器
任务8.1 MySQL触发器
触发器的概念、触发器与存储过程的区别
触发器的操作
知识点小结
本节实验
任务8.1 MySQL触发器
能力目标
1.掌握触发器的概念、触发器和存储过程的区别(重点);
2.掌握触发器的创建与使用(难点)。
思政目标
1.培养学生的爱国思想;
2.培养学生敢于质疑,大胆创新精神。
复习
存储过程
函数
任务8.1 MySQL触发器
触发器是由事件来触发某个操作,这些事件包括insert语句、update语句和delete语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。
触发器是一种特殊的存储过程,它不带任何的输入输出参数,不能被显式调用。触发器与特定的MySQL对象(如表)相关联,在这些对象的指定操作发生时,服务器自动执行该触发器。
触发器
概念
创建使用触发器
查看触发器
删除触发器
对触发器的进一步说明
概念
触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。
概念
触发器具有以下的作用:
安全性
审计
实现复杂的数据完整性规则
实现复杂的非标准的数据库相关完整性规则
触发器
概念
创建使用触发器
查看触发器
删除触发器
对触发器的进一步说明
创建触发器
触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。在MySQL中,创建触发器的基本形式如下:
CREATE TRIGGER 触发器名
{ BEFORE | AFTER}
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
ON 表名 | 视图名 FOR EACH ROW
BEGIN
SQL_语句 [ ...n ]
END
说明:
在触发器中有两个临时表NEW、OLD可以访问。OLD表用于存储被DELETE 或UPDATE 语句删除或更新前的行的副本;NEW表用于存储被INSERT或UPDATE语句插入或更新后的行的副本。即旧行被复制到OLD表中,新行被复制到NEW表中。例如:
创建触发器
create trigger 更改班级
after update
on student for each row
begin
update class
set classnum=classnum-1
where class.classname=OLD.Sclass;
update class
set classnum=classnum+1
where class.classname=NEW.Sclass;
end
案例:
对学生表创建插入触发器,当有一条新的记录插入表中,就更新班级表中相应班级的人数。
分析:
1.对哪个表创建插入触发器?
2.是before还是after?
3.更新语句怎样写?
创建触发器
触发器
概念
创建使用触发器
查看触发器
删除触发器
对触发器的进一步说明
查看触发器
可以通过执行以下命令执行命令查看触发器的状态、语法等信息,但是因为不能查看指定的触发器,所以每次否返回所有的触发器信息,使用起来不是很方便。
show triggers
另一种方法是查询系统表information_schema.triggers表,这个方式可以查询指定触发器的指定信息,操作起来明显方便得多。
触发器
概念
创建使用触发器
查看触发器
删除触发器
对触发器的进一步说明
删除触发器
语法的基本形式如下:
注:数据库(schema_name)是可选的。如果省略了schema,将从当前数据库中删除触发程序。
drop trigger [schema_name.]trigger_name触发程序
触发器
概念
创建使用触发器
查看触发器
删除触发器
对触发器的进一步说明
对触发器的进一步说明
触发器不能调用将数据返回客户端的存储过程,也不能使用采用call语句的动态sql。
触发器不能使用以显式或隐式方式开始或结束事务的语句,如start transaction、commit或rollback。 需要注意以下两点:
(1)MySQL触发器针对行来操作,当处理大数据集的时候可能 效率很低。
(2)触发器不能保证原子性,例如在myisam中,当一个更新