[Mysql数据库] mysql数据库使用trigger更新中间表
2015-12-20 17:55
627 查看
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] |
相关文章推荐
- Mysql高并发优化
- 利用MySQL Workbench导出MySQL创建的数据表关系图图文教程
- MySql可视化工具MySQL Workbench使用教程
- 重装mysql
- mac 安装 mysql.tar.gz
- mysql5.6二进制安装
- 如何启动/停止/重启MySQL + 进入MYSQL
- MySQL Performance-Schema(二) 理论篇
- mysql 排序后获得某行的位置
- MySql的基本常识和crud语句大全。。。。。
- 【数据库】MySQL安装及配置
- MySQL错误Another MySQL daemon already running with the same unix socket.
- MySQL 基础常用命令
- MySQL好用的数学函数
- 一千行MySQL学习笔记
- 分布式数据存储 - MySQL双主复制
- mysql添加索引
- RHEL下MySQL中文乱码解决办法
- Mysql查询缓存研究
- MySQL支持中文