mysql的触发器-含案例-含效果

阅读次数: 1,077

  • A+
所属分类:MYSQL 运维

今天做下触发器的笔记

原来都是用命令的,现在好多都用工具了。

情景一: 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;

 


效果和工具截图如下

mysql的触发器-含案例-含效果

mysql的触发器-含案例-含效果

order 表增加时,push表自动增加(根据order表主键增加)

order表修改时,push表自动修改(根据order表state来判断是否增加push)

这样一来就实现了完全抛开代码实现的实时推送功能了。

注意:如果项目很大时,最好事先做好表的分区功能。负载没做测试,从服务器最好不要有触发器吧。

转载请注明源出处:https://www.shikexu.com/archives/617

作者: 神秘剑派-大师兄   技能  xcz

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: