阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL数据库使用trigger更新中间表

123次阅读
没有评论

共计 2424 个字符,预计需要花费 7 分钟才能阅读完成。

一些 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),
    -> 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 $
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
begin
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$
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 初始化
测试:
mysql> insert into base_test values(null,1,1);
Query OK, 1 row affected (0.00 sec)
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)
mysql> select * from mid_test where ownflag=’1′;
+———+———+
| ownflag | sumflag |
+———+———+
| 1      |      2 |
+———+———+
1 row in set (0.00 sec)
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)
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)
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)

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2424字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中