mysql 触发器
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,
比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 简单讲触发器(trigger)就是监视某种情况,并触发某种操作。
触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)
创建触发器:
//商品表 CREATE TABLE `g` ( `gId` int(4) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `num` int(4) NOT NULL, PRIMARY KEY (`gId`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; //订单表 CREATE TABLE `o` ( `oId` int(4) NOT NULL AUTO_INCREMENT, `gId` int(4) NOT NULL, `much` int(4) NOT NULL, PRIMARY KEY (`oId`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; //插入数据 INSERT INTO `g` VALUES ('1', '商品1', '10'); INSERT INTO `g` VALUES ('2', '商品2', '10'); INSERT INTO `g` VALUES ('3', '商品3', '10'); //创建触发器 CREATE TRIGGER tg1 AFTER INSERT ON o for EACH ROW BEGIN UPDATE g SET num=num-3 where gId=1; END $ //执行 下订单 insert into o(gId,much) values(1,3)$ //删除 触发器 drop trigger tg1 $ 说明: 当我们 下订单 购买商品1 3个时 执行 select * from g where gId=1 会发现 num=7
案例:
上面的数据是死数据,但在开发过程中对某件商品购买几件是动态的 (表关系同上)
//触发器 当用户购买商品时更新商品数量 create trigger tg2 after insert on o for each row begin update g set num=num-new.much where gId=new.gId; end $ //用户下单 (购买商品) insert into o(gId,much) values(2,5)$ //触发器 当用户撤销订单时更新数量 create trigger tg3 after delete on o for each row begin update g set num = num + old.much where gId = old.gId; end $ //用户撤销订单 delete from o where oId = 1 $ //触发器 用户修改订单内商品的数量 create trigger tg4 after update on o for each row begin update g set num = num+old.much-new.much where gId =old.gId/new.gId; end $ //用户修改订单数量 update o set much =3 where oId = 2 $
每天用心记录一点点。内容也许不重要,但习惯很重要!