触发器(trigger)是MySQL提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事 件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对 一个表进行操作作(insert,delete, update)时就会激活它执行。
简单理解: 当我们执行一条sql语句的时候,这条sql语句的执行会自动去触发执行其他的sql语句。
1. 监视地点(table)
2. 监视事件(insert/update/delete)
3. 触发时间(before/after)
4. 触发事件(insert/update/delete)
1) 语法格式
delimiter $ -- 将Mysql的结束符号从 ; 改为 $,避免执行出现错误 CREATE TRIGGER Trigger_Name -- 触发器名,在一个数据库中触发器名是唯一的 before/after(insert/update/delete) -- 触发的时机 和 监视的事件 on table_Name -- 触发器所在的表 for each row -- 固定写法 叫做行触发器, 每一行受影响,触发事件都执行 begin -- begin和end之间写触发事件 end $ -- 结束标记
2) 向商品中添加一条数据
# 向商品中添加一条数据 INSERT INTO goods VALUES(1,'book',40);
3) 需求: 在下订单的时候,对应的商品的库存量要相应的减少,卖出商品之后减少库存量。
编写触发器
-- 1.修改结束标识 DELIMITER $ -- 2.创建触发器 CREATE TRIGGER t1 -- 3.指定触发的时机,和要监听的表 AFTER INSERT ON orders -- 4.行触发器 固定写法 FOR EACH ROW -- 4.触发后具体要执行的事件 BEGIN -- 订单+1 库存-1 UPDATE goods SET num = num -1 WHERE gid = 1; END$
· 4) 查询 goods表中的数据
5) 向订单表中添加一条数据
INSERT INTO orders VALUES(1,1,25);
6) goods表中的数据随之 -1