1.触发器
2.创建触发器语法
(1)创建一个触发器,这样当order_table这个订单表中被insert插入数据后,就会触发begin和end之间的sql语句,after insert表示被监听的order_table表在insert之后触发触发器begin和end之间的代码。
-- 创建一个触发器tg1 监听order_table表,当order_table表有了insert操作之后-- 触发begin和end中间的sql语句,begin和end之间的sql语句可以有多条sql语句,多条sql语句用;间隔create TRIGGER tg1 AFTER INSERT on order_tablefor EACH row -- 固定写法BEGIN update goods set num = num -3 where id = 1;END
(2)删除触发器
-- 删除触发器DROP TRIGGER tg1;
(3)触发器中的语句动态的得到监听表中数据的更新或插入数据的值
-- 创建一个触发器tg1 监听order_table表,当order_table表有了insert操作之后-- 触发begin和end中间的sql语句,begin和end之间的sql语句可以有多条sql语句,多条sql语句用;间隔-- new.much 和new.gid中的new是关键字,当监听的表中有insert操作时,new就代指的那些被操作的数据-- 的集合。new.much就表示新插入监听表中数据的much字段值拿到,new.gid就表示将新插入监听表中数据的gid字段值拿到-- 如此触发器中的sql语句便可动态的识别到插入监听表中的数据的值create TRIGGER tg1 AFTER INSERT on order_tablefor EACH row -- 固定写法BEGIN update goods set num = num - new.much where id = new.gid;END-- 删除触发器DROP TRIGGER tg1;
(4)模拟退货订单表中的订单数量与商品表的变化
-- 创建一个触发器tg2,监听的表是order_table,监听的事件时update修改操作,在修改操作之后触发触发器的语句-- 监听到update修改order_table订单表时,则会触发将商品表中的商品数量num设置为商品数量+老的订单数 - 修改order_table时的值,修改的是那条老的订单记录create TRIGGER tg2 after update on order_tablefor each ROWBEGIN update good set num = num + old.much - new.much where id = old.gid;END
(5)模拟删除订单后的商品表的变化
-- 模拟订单删除后商品表的变量。-- 创建一个触发器,监听order_table订单表的删除事件,当删除之后触发触发器中的sql语句create TRIGGER tg3 after DELETE on order_tablefor EACH ROWBEGIN update good set num = num + old.much from where id = new.gid; -- 修改商品表中的num商品数据量字段的值等于剩余的num值+订单中之前的值,修改的是删除订单记录的那条记录中的商品的id对应的商品表中的商品END
(6)查看触发器
-- 查看触发器show TRIGGERS;