触发器[Trigger]

创建触发器语法

在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:表示触发器执行条件,包含“deleteinsertupdate”语句。

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;

 

注:验证方法与前面相同

创建多条执行语句触发器:(要求截图)

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. 1.  查看触发器

 

Show triggers;

Show triggers \G

 

  1. 2.  通过查看系统表triggers实现查看触发器
Use information_schema;

Select * from triggers \G

 

  1. 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”语句。

posted @ 2020-04-13 16:35  _Jack_test  阅读(580)  评论(0编辑  收藏  举报