MYSQL-----触发器

触发器

触发器是由 INSERT,UPSET,DELETE等事件来触发某种特定操作。
满足触发器的触发条件时,数据库系统就会执行触发器中定义的程序语句。这样可以保证操作的一致性。
example: 当学生表中新增了一个学生的信息时,学生人数的总数也应该增加,因此我们可以在这里设置一个触发器,当增加一个记录时,执行一次计算人数的操作.

创建触发器

1)创建只有一个执行语句的触发器
create trigger 触发器名 before|after 触发事件 on 表名 for each row 执行语句;
eg:
创建一个由Insert操作触发的触发器。
create trigger trig_name before insert on trig_time for each row insert into trig_time values(now();
在向trig_name表中执行insert操作时,数据库系统都会在insert之前向数据库的trig_time表中插入当前时间。

2)创建有多个执行语句的触发器
create trigger 触发器名 before|after 触发事件 on 表名
for each row
begin 执行语句列表 end;

不同的执行语句之间用分号隔开。但mysql默认情况下是以分号作为结束执行语句的,为了解决这个问题,我们引入delimiter.
delimiter &&可以将结束符变为 &&,在创建完触发器之后,我们可以可以用命令delimiter ;将结束符变为分号。

eg:
delimiter &&
create trigger trig2 after insert on trig_table
for each row
begin
insert into trig_time values(‘13:36:00’);
insert into trig_time values(‘14:36:00’);
end&&
delimiter ;

在向trig_name表中执行insert操作时,数据库系统都会在insert之后向数据库的trig_time表中插入两次当前时间。
从这个例子可以看出,触发器可以同时执行多条执行语句。
MYSQL中一个表在相同触发时间的相同触发事件,只能创建一个触发器。

查看触发器

1)show triggers\G;
show triggers无法查询指定的触发器,显示的是所有触发器的信息。
如果触发器很多时,不方便找到所需触发器的信息。当触发器较少时,可以使用show triggers语句。

2)在triggers中查看触发器信息。

a)查看triggers表中的所有信息。
select * from information_schema.triggers;

b)查看triggers表中的指定的触发器信息。
select * from information_schema.triggers where trigger_name=’触发器名’;

触发器的使用

在MYSQl中触发器的执行顺序是before触发器,表操作(insert,delete,upset)和after触发器。

在激活触发器时,对触发器的执行语句有一定的限制。例如触发器中不能包括:start tranction,commit,rollback等关键词,也不能包含call语句

在触发器的执行过程中,任何步骤出错都会阻止程序向下运行。对于普通表来说,已经被更新过表不能再回滚,更新后的数据继续保持在表中。因此我们在设计触发器的时候应该认真考虑。

删除触发器

drop trigger 触发器名;

如果只指定触发器名称,那么就会在当前数据库下寻找该触发器进行删除。
如果同时指定了数据库名称,那么就会到指定的数据库下去寻找该触发器删除。drop trigger 数据库名.触发器名。
当我们不需要某些触发器时,应及时删除,否则有时执行语句会造成数据的变化。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值