码迷,mamicode.com
首页 > 数据库 > 详细

mysql 触发器

时间:2015-07-10 12:42:15      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

触发器(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 $
View Code

 

mysql 触发器

标签:

原文地址:http://www.cnblogs.com/jalja/p/4635087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!