在插入行用户平均MSQL等详细信息后触发自动平均

时间:2017-11-04 15:52:01

标签: mysql sql

如何为每行自动化rateAvg

userID pID rate1 rate2 rate3 rate4 rate5   rateCmmt     rateAvg     
42      24  2     4      3    4     1      Lorem ipsum     0
45      25  3     4      4    2     1      Lorem ipsum     0

这是我尝试的代码。

DROP TRIGGER IF EXISTS `updateAVG`;
CREATE DEFINER=`root`@`localhost` 
TRIGGER `updateAVG` 
AFTER INSERT ON `tblrate` 
FOR EACH ROW UPDATE tblrate SET `rateAvg` = ((`rate1`+`rate2`+`rate3`+`rate4`+`rate5`)/5)

1 个答案:

答案 0 :(得分:1)

你想要之前插入触发器:

DROP TRIGGER IF EXISTS `updateAVG`;
CREATE DEFINER=`root`@`localhost` TRIGGER `updateAVG` BEFORE INSERT ON `tblrate` 
FOR EACH ROW 
BEGIN
    SET new.rateAvg = (new.rate + new.rate2 + new.rate3 + new.rate4 + new.rate5) / 5;
END;

您也可以使用视图执行此操作:

create v_updateAVG as 
    select u.*, (u.rate + u.rate2 + u.rate3 + u.rate4 + u.rate5) / 5 as rateAvg
    from updateAVG;

或者,在MySQL 5.7.6+中作为生成列:

alter table updateAVG add rateAvg as ((rate + rate2 + rate3 + rate4 + rate5) / 5);

最后两种方法的优点是在插入和更新后,平均值始终是最新的。