触发器[Trigger]
创建触发器语法
l 在MySQL中创建触发器通过SQL语句create trigger 来实现其语法形式如下:
create trigger trigger_name
BEFORE|AFTER trigger_EVENT
ON TABLE_NAME FOR EACH ROW trigger_STMT
主要参数说明:
trigger_name:表示要创建的触发器名称。 BEFORE:“在……之前” 指定触发器的执行时间。 AFTER:“在……之后” 指定触发器的执行时间。 trigger_EVENT:表示触发器执行条件,包含“delete,insert,update”语句。 TABLE_NAME:表示触发事件操作表的名字 FOR EACH ROW:表示任何一条记录上的操作满足触发事件都会触发该触发器。 trigger_STMT:表示激活触发器后被执行的语句。
1:在学生管理库中,当向学生表添加一条学生信息时,同时还需要更新班级表中的班级人数,具体代码如下:
show databases; use 学生管理 show tables; desc 学生表; desc 班级表; create trigger trig_班级人数1 after insert on 学生表 for each row //只要往学生表中插入数据就会触发触发器 update 班级表 set 班级人数=班级人数+1;
查看学生表插入记录前检查原有人数:
select * from 班级表;
再插入数据查看
insert into 学生表 values('张伟','B01','男','19901010','南昌市'); select * from 班级表;
查询结果显示insert触发器已经成功执行!
2:在学生管理中,删除学生表中的一条学生信息时,同时还需要更新班级表中的班级数,具体代码如下:
create trigger trig_班级人数2 after delete on 学生表 for each row update 班级表 set 班级人数=班级人数-1;
注:验证方法与前面相同
l 创建多条执行语句触发器:(要求截图)
3:创建触发器实现向专业表插入记录时,就会在插入之后向日志表插入两条记录。
创建日志表 create table 日志表( 日志编号 int primary key auto_increment, 名称 varchar(20), 记录时间 datetime ); desc 专业表; desc 日志表;
创建触发器:
delimiter $$//结束符号设置为“$$” create trigger tri_记录时间 after insert on 专业表 for each row begin insert into 日志表 values(null,'专业表',now()); insert into 日志表 values(null,'专业表',now()); end $$ delimiter ; //结束符号设置为“;”
验证:
use 学生管理 insert into 专业表 values('01','计算机系'); select * from 日志表;
执行结果显示,在向专业表插入数据之后,会向日志表中插入两条记录,从而可以发现 tri_记录时间触发器创建成功!
- 1. 查看触发器
Show triggers;
Show triggers \G
- 2. 通过查看系统表triggers实现查看触发器
Use information_schema; Select * from triggers \G
- 3. 删除触发器
Drop trigger trigger_name;
简述触发器的基本概念?
触发器是用来实现由一些表事件触发的某个操作,是与数据库对象表关联最紧密的数据库对象之一。
简述触发器的主要作用?
1.安全性。能够基于数据库的值使用户具有操作数据库的某种权利。
能够基于时间限制用户的操作,比如不同意下班后和节假日改动数据库数据。
能够基于数据库中的数据限制用户的操作,比如不同意股票的价格的升幅一次超过10%。
2.审计。能够跟踪用户对数据库的操作。
审计用户操作数据库的语句。
把用户对数据库的更新写入审计表。
3.实现复杂的数据完整性规则
# 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同触发器能够引用列或数据库对象。比如,触发器可回退不论什么企图吃进超过自己保证金的期货。
# 提供可变的缺省值。
4.实现复杂的非标准的数据库相关完整性规则。触发器能够对数据库中相关的表进行连环更新。比如,在auths表author_code列上的删除触发器可导致对应删除在其他表中的与之匹配的行。
在改动或删除时级联改动或删除其他表中的与之匹配的行。
在改动或删除时把其他表中的与之匹配的行设成NULL值。
在改动或删除时把其他表中的与之匹配的行级联设成缺省值。
触发器可以拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。当插入一个与其主健不匹配的外部键时,这样的触发器会起作用。比如,可以在books.author_code 列上生成一个插入触发器,假设新值与auths.author_code列中的某值不匹配时,插入被回退。
5.同步实时地复制表中的数据。
6.自己主动计算数据值,假设数据的值达到了一定的要求,则进行特定的处理
创建触发器失败的主要原因?
创建语句错误
触发器选项错误
delimiter的含义是什么?在什么情况下使用它?
修改系统结束符,使用插入数据的情况下使用
trigger_EVENT参数表示什么?它包含哪些语句?
表示触发器执行条件,包含“delete,insert,update”语句。