mysql的触发器
一般用在需要有数据统计的时候,如果每次请求都要对一张表的数据进行统计,可以考虑触发器,
如:一个公司的 雇员信息表中,有用户名 和 用户的工资字段,
现在需要在前端页面上展示,总的雇员数,和总的工资数,如果每请求一次都要去使用 mysql的聚合函数 sum 和 count 其实是一个很低效的事
解决方法:
建一个统计表 : 表名 total, 并建一个触发器,当雇员表(employe)中的数据发生 insert | update | delete等操作时,由触发器来使total表做出相应的修改
以下是sql 语句
创建 雇员表
create table empolye (
id int unsigned auto_increment primary key,
username char(10),
money int
)engine innodb default charset utf8;
_____________________________________________________________
创建统计表
create table total(
user_total int,
money_total int
)engine innodb default charset utf8;
_________________________________________________________________
在雇员表中加一些数据
insert into employe values(null,'huang',10000),(null,'jun',8000),(null,'hui',12000);
把数据写到total表中
insert into total select count(id),sum(money) from employe;
__________________________________________________________________
这里就是重点的创建触发器
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
TRIGGER `mytrigger`.`empolye_ai` AFTER INSERT
ON `mytrigger`.`empolye`
FOR EACH ROW
BEGIN
UPDATE total SET user_total = user_total +1,money_total = money_total + NEW.money;
END$$
DELIMITER ;
这样,当employe表中有数据写入时,就会触发,相应的 total表中的更新操作
当update时的触发器
当删除时的触发器
注意,触发器不可以多次定义,如果一个表已经定义了一个 AFTER的触发器 ,那么就不能再定义一个,解决的办法有两种
一种是 可以写一个 BEFORE的触发器
另一种 就是 在AFTER的触发器中可以书写多条的sql语句