您的位置:首页 > 数据库 > MySQL

[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]

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: