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 |
[Mysql数据库] mysql数据库使用trigger更新中间表
最新推荐文章于 2022-11-10 20:30:06 发布