MySQL触发器使用详解

触发器: 事先写好一段代码, 自动的监听某些要发生的操作事件(增删改), 当某些事件发生的时候,会自动触发写好的代码.

触发器要素: 监听对象(表: 中的数据行), 事件类型(增删改), 事件时间(前后), 触发器名字(自定义)

一、创建触发器

事先将一段需要执行的代码维护好

一个表中只能有一个对应时间,对应类型的触发器: 一张表最多有6个触发器

触发时间: before和after
事件类型: insert, update 和delete

基本语法

create trigger 触发器名字 事件时间 事件类型 on 表名 for each row
begin -- 代表开始大括号{
-- 触发器的内部代码;
-- 每一条语句都得有语句结束符分号: 要不然无法正常执行
end -- 代表结束大括号}

在触发器构造结构的过程中: 因为触发器内部会有语句结束符,所以会中断触发器结构: 需要临时的在创建触发器的时候, 修改语句结束符(不再是分号)
delimiter 自定义语句结束符
在创建完触发器之后: 使用自定义的语句结束符结束,再修改回来
delimiter ; -- 改回来

触发器的创建可以使用最简触发器: 触发器内部只有一条语句: 可以省略”大括号”: begin和end, 这时候也不需要修改临时语句结束符.

二、查看触发器

查看触发器的结构

查看所有触发器或者部分触发器: show trigger like ‘pattern’;

触发器存在于表中: information_schema.triggers

三、使用触发器

触发器是在定义的时候就已经为表进行绑定的: 不是手动,是当被绑定的表中发生了指定时间内的指定事件的时候, 会自动触发.

触发器: after insert on t_order: 在订单被插入到数据表(t_order)的时候会自动触发.

插入了一条订单记录,导致商品表的库存被减少,触发器内部处理

四、删除触发器

触发器不能被修改,只能先删除,后增加.
drop trigger 触发器名字;

五、触发器记录

触发器记录: 当触发器绑定表(t_order),上面的记录发生修改时(增删改), 系统会在修改之前, 模拟将要发生之后和发生之前的结果.

系统提供了两个关键字来保存模拟的结果: old和new

  • old: 代表的是数据要发生操作之前的结果: 插入操作没有old
  • new: 代表是数据要发生操作之后的结果: 删除操作没有new

old和new都是在触发器的内部使用: old/new.字段名: old.num代表原订单的商品数量, new.num代表更改之后的订单的对应商品数量.

插入订单看商品数据

触发器对应的事件的操作与被绑定表的记录是同时生效的: 要么都成功,要么都失败.

如何通过触发器阻止不合理的数据的操作的发生呢?暴力

posted @ 2016-03-05 16:05  chenjiacheng  阅读(229)  评论(0编辑  收藏  举报