如何使用msql触发器更新列

时间:2017-06-18 13:29:21

标签: mysql sql triggers

如下图所示,我希望在插入paper_score和final_score的值时自动计算列grand_score。

这就是我的尝试:

DELIMITER $$
CREATE TRIGGER myTableAutoSum
BEFORE INSERT ON `stumgr_scores` FOR EACH ROW
BEGIN
SET NEW.grand_score= NEW.paper_score + NEW.final_score;
END;
$$
DELIMITER ;

问题

当我输入paper_score和final_score的值时,表格不会更新(我的意思是grand_score)

Image

1 个答案:

答案 0 :(得分:0)

我不会立即看到你的触发器有什么问题,除非其中一个值恰好是NULL。可以使用COALESCE()轻松修复:

SET NEW.grand_score = COALESCE(NEW.paper_score, 0) + COALESCE(NEW.final_score, 0);

我质疑为此目的使用触发器。如果值以这种方式改变,您还需要UPDATE的触发器。

从表中删除grand_total并使用视图是否更简单?

create view v_stumgr_scores as
    select ss.*,
           COALESCE(ss.paper_score, 0) + COALESCE(ss.final_score, 0) as grand_score
    from stumgr_scores ss;

或者,更好的是,在最新版本的MySQL中,只需使用生成的列。这是最好的解决方案 - 它甚至允许您在值上创建索引。