概述
今天做下触发器的笔记
原来都是用命令的,现在好多都用工具了。
情景一: after
插入本表一 order 后再修改表二 push
表一:
CREATE TABLE `33hao_order` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`state` tinyint(1) unsigned NOT NULL DEFAULT '1',
`goods_id` int(8) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
CREATE TRIGGER `order_add_after` AFTER INSERT ON `33hao_order` FOR EACH ROW begin
declare flag_num int(10);
set flag_num = (select count(*) as flag_num from 33hao_order where id=new.id) ;
if flag_num =1 then
insert into 33hao_push (push_desc,item_id) values (new.id,6);
end if;
end;
表二:
CREATE TABLE `33hao_push` (
`id` int(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '推送ID',
`type` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '推送类型',
`push_desc` varchar(30) NOT NULL COMMENT '推送描述',
`push_state` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '推送状态',
`item_id` int(8) unsigned NOT NULL DEFAULT '0' COMMENT '项目ID',
`member_id` int(8) unsigned NOT NULL DEFAULT '0' COMMENT '会员id',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
情景二 :before
表一新增或修改前(也就是数据还没有出来时改动数据)表一 或改动其他表
order 表要增加的内容
CREATE TRIGGER `order_mod_before` BEFORE UPDATE ON `33hao_order` FOR EACH ROW begin
declare flag_num int(10);
set flag_num = old.state;
if flag_num =1 then
insert into 33hao_push (push_desc,item_id) values (new.state,6);
end if;
end;
效果和工具截图如下
order 表增加时,push表自动增加(根据order表主键增加)
order表修改时,push表自动修改(根据order表state来判断是否增加push)
这样一来就实现了完全抛开代码实现的实时推送功能了。
注意:如果项目很大时,最好事先做好表的分区功能。负载没做测试,从服务器最好不要有触发器吧。
作者: 神秘剑派-大师兄 技能 xcz
最后
以上就是深情机器猫为你收集整理的mysql 触发器复杂案例_mysql的触发器-含案例-含效果 | 时刻需的全部内容,希望文章能够帮你解决mysql 触发器复杂案例_mysql的触发器-含案例-含效果 | 时刻需所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复