DROP TABLE IF EXISTS `goods`; CREATE TABLE `goods` ( `gid` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `num` smallint(6) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of goods -- ---------------------------- INSERT INTO `goods` VALUES ('1', 'cat', '33'); INSERT INTO `goods` VALUES ('2', 'dog', '34'); INSERT INTO `goods` VALUES ('3', 'pig', '55');
-- ---------------------------- -- Table structure for ord -- ---------------------------- DROP TABLE IF EXISTS `ord`; CREATE TABLE `ord` ( `oid` int(11) DEFAULT NULL, `gid` int(11) DEFAULT NULL, `much` smallint(6) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- ---------------------------- -- Records of ord -- ---------------------------- INSERT INTO `ord` VALUES ('1', '1', '1'); INSERT INTO `ord` VALUES (null, '2', '2'); DROP TRIGGER IF EXISTS `t2`; DELIMITER ;; CREATE TRIGGER `t2` AFTER INSERT ON `ord` FOR EACH ROW BEGIN UPDATE goods SET num = num - new.much WHERE gid = new.gid; END ;; DELIMITER ;
目的:使用触发器当订单表中新增一条订单时,货物中则对应减少购买的数量
第一种:
create trigger t1 after insert on ord for each row begin update goods set num=num-1 where gid =1; end
查看自定义的触发器:
show triggers \G$
delimiter $
drop trigger t2$
===触发器的引用行变量
看上面写的触发器,用到了new。是表示什么意思呢?
当新增一行时,用new 表是新行
当删除一行时,用old 表示旧行
结果:每当ord表有新增一条数据时,就会触发写的触发器,从而去更新goods表
下面的链接讲的更详细,呵呵
http://www.cnblogs.com/zzwlovegfj/archive/2012/07/04/2576989.html