mysql触发器学习

来源:互联网 发布:退货 淘宝帐号是什么 编辑:程序博客网 时间:2024/05/14 21:36
先创建两张表,一张货物表,一张订单表
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 BEGINUPDATE goodsSET num = num - new.muchWHEREgid = 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$

触发器t2,已经在上面的ord表中了,就不写了

===触发器的引用行变量

看上面写的触发器,用到了new。是表示什么意思呢?

当新增一行时,用new 表是新行

当删除一行时,用old 表示旧行


结果:每当ord表有新增一条数据时,就会触发写的触发器,从而去更新goods表

下面的链接讲的更详细,呵呵

http://www.cnblogs.com/zzwlovegfj/archive/2012/07/04/2576989.html
0 0
原创粉丝点击