触发器: 事先写好一段代码, 自动的监听某些要发生的操作事件(增删改), 当某些事件发生的时候,会自动触发写好的代码.
触发器要素: 监听对象(表: 中的数据行), 事件类型(增删改), 事件时间(前后), 触发器名字(自定义)
一、创建触发器
事先将一段需要执行的代码维护好
一个表中只能有一个对应时间,对应类型的触发器: 一张表最多有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代表更改之后的订单的对应商品数量.
插入订单看商品数据
触发器对应的事件的操作与被绑定表的记录是同时生效的: 要么都成功,要么都失败.
如何通过触发器阻止不合理的数据的操作的发生呢?暴力