如下图所示,我希望在插入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)
答案 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中,只需使用生成的列。这是最好的解决方案 - 它甚至允许您在值上创建索引。