`
memorymyann
  • 浏览: 267600 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

触发器使用

阅读更多

触发器算是蛮好用的一个功能了,所谓触发器就是在某种条件下会触发执行的一个小程序。比如我们做一个大型的数据处理,这种例子很多,有一个表有很多记录,我们要经常拿到这个表的一些统计信息,比如这个表有多少条数据。从实现上来讲思路很多。我们可以使用 select count(id) from 表名,这是个不错的选择,但数据量太大,速度怎么样就不能保证了。

另一个办法,我们不妨记录下这个表的现在大小,在这个表每次插入一条语句时候就对这个计数进行加一操作,然后但我们要统计信息时候就直接取这个数据比select count(id) from 表名的速度要快多了。

 

当然,这么做也有风险就是我们要过一段时间确定这个计数的正确性。触发器出错的概率不大,但这个计数不被改,或者出问题则没人敢打包票,所以我们可以选择定时去核实他,比如说1天。

 

接下来我们就用触发器实现一个功能,对pet表的数据进行计数。

mysql> select * from pet;
+----------+--------+---------+------+------------+------------+
| name     | owener | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | m    | 1993-02-04 | 2008-12-01 |
| Claws    | Gwen   | cat     | m    | 1992-01-04 | 2008-12-01 |
| Buffy    | Harold | cat     | m    | 1996-01-20 | 2008-12-01 |
| Didi     | Gwen   | cat     | m    | 1997-01-04 | 2008-12-01 |
| Fatpower | Shiwa  | cat     | m    | 1997-01-04 | 2008-12-01 |
| Cliak    | Yuna   | dog     | f    | 2000-11-09 | NULL       |
+----------+--------+---------+------+------------+------------+
6 rows in set (0.00 sec)

 

我们用account_pet表记录这个表的记录的条数

mysql> select * from account_pet;
+-------+
| count |
+-------+
|     6 |
+-------+
1 row in set (0.00 sec)

接下来我们开始书写计数触发器,所谓计数无非就是当我们对pet表进行插入操作数是,将count+1

mysql> delimiter |

mysql> create trigger account_pet_trigger after insert on pet
    -> for each row begin
    -> update account_pet set count = count + 1;
    -> end;
    -> |
Query OK, 0 rows affected (0.05 sec)

mysql> delimiter ;

接下来你就会发现每当你插入一个新的数据到pet,account_pet_trigger触发器就被触发执行,他就会执行他的执行体update account_pet set count = count + 1;将我们的统计加一。

 

触发器格式:

create trigger 触发器名称 trigger_time trigger_event on table_name for each row 执行体

trigger_time: before after

trigger_event: insert update delete很容易理解吧

为了完成统计功能,我们还要对pet表格写一个删除时候减一的触发器。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics