mysql 触发器基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hjh15827475896/article/details/83105874

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语句

猜你喜欢

转载自blog.csdn.net/hjh15827475896/article/details/83105874