[Mysql数据库] mysql数据库使用trigger更新中间表

北风网AD

mysql数据库使用trigger更新中间表,有需要的朋友可以参考下。


一些count类的查询,在很频繁时,一般不直接使用原表,二是使用trigger更新到中间表上,直接使用中间表获得查询结果。

以下是我写的一个例子。只有insert与update操作。

测试表与trigger创建,mid_test中sumflag的值为base_table中isflag大于0的值

mysql> create table base_test(id int auto_increment primary key,
-> isflag tinyint(1),http://www.kmnk03.com/hxpfk/tf/344.html
-> ownflag varchar(5))engine=innodb;
Query OK, 0 rows affected (0.45 sec)


mysql> create table mid_test(ownflag varchar(5) primary key,
-> sumflag int)engine=innodb;
Query OK, 0 rows affected (0.11 sec)
表创建


DELIMITER $http://www.kmnk03.com/hxpfk/tf/345.html
create trigger tri_base_insert after insert
on base_test for each row
begin
if new.isflag > 0 then
declare c int;
set c = (select sumflag from mid_test where ownflag = new.ownflag);
update mid_test set sumflag = c + 1 where ownflag = new.ownflag;
end if;
end$
DELIMITER ;
Insert trigger 创建


DELIMITER $
create trigger tri_base_update after update
on base_test for each row
beginhttp://www.kmnk03.com/hxpfk/tf/346.html
declare c int;
declare d int;
if new.isflag <> old.isflag then
if new.isflag > 0 then set d=1;
else set d=-1;
end if;
set c = (select sumflag from mid_test where ownflag = new.ownflag);
update mid_test set sumflag = c + d where ownflag = new.ownflag;
end if;
end$http://www.kmnk03.com/hxpfk/tx/347.html
DELIMITER ;
Update trigger 创建




INSERT INTO `wzy`.`mid_test` (`ownflag`, `sumflag`) VALUES ('1', '0');
INSERT INTO `wzy`.`mid_test` (`ownflag`, `sumflag`) VALUES ('2', '0');
INSERT INTO `wzy`.`mid_test` (`ownflag`, `sumflag`) VALUES ('3', '0');
INSERT INTO `wzy`.`mid_test` (`ownflag`, `sumflag`) VALUES ('4', '0');
Mid_test初始化
http://www.kmnk03.com/hxpfk/tx/348.html



测试:
mysql> insert into base_test values(null,1,1);
Query OK, 1 row affected (0.00 sec)
http://www.kmnk01.com/hxpfk/2015/tf_1220/322.html

mysql> select * from mid_test where ownflag='1';
+---------+---------+
| ownflag | sumflag |
+---------+---------+
| 1 | 1 |
+---------+---------+
1 row in set (0.00 sec)


mysql> insert into base_test values(null,1,1);
Query OK, 1 row affected (0.12 sec)
http://www.kmnk01.com/hxpfk/2015/tf_1220/323.html

mysql> select * from mid_test where ownflag='1';
+---------+---------+
| ownflag | sumflag |
+---------+---------+
| 1 | 2 |
+---------+---------+
1 row in set (0.00 sec)
http://www.kmnk01.com/hxpfk/2015/tf_1220/324.html

mysql> insert into base_test values(null,1,1);
Query OK, 1 row affected (12.34 sec)


mysql> select * from mid_test where ownflag='1';
+---------+---------+
| ownflag | sumflag |
+---------+---------+
| 1 | 3 |
+---------+---------+
1 row in set (0.00 sec)
http://www.kmnk01.com/hxpfk/2015/hzj_1220/325.html



mysql> update base_test set isflag=0 where ownflag='1';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 3 Changed: 0 Warnings: 0


mysql> select * from mid_test where ownflag='1';
+---------+---------+
| ownflag | sumflag |
+---------+---------+
| 1 | 0 |
+---------+---------+
1 row in set (0.00 sec)

http://www.kmnk01.com/hxpfk/2015/hzj_1220/326.html
mysql> update base_test set isflag=1 where id=3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0


mysql> select * from mid_test where ownflag='1';
+---------+---------+
| ownflag | sumflag |
+---------+---------+
| 1 | 1 |
+---------+---------+

1 row in set (0.05 sec)

kmnk01.com
kmnk03.com
www.knmk01.com]
www.kmnk03.com]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值