2017-01-22 101 views
0

我试图让单元格Points_Per_Game在MySQL中使用触发器来计算,不知道我错过了什么。更新MySQL触发总和

Points_Per_Game = Total_Points/Games Played, 


DELIMITER $$ 
CREATE TRIGGER trg_Point_Per_Game 
AFTER UPDATE ON Players 
FOR EACH ROW 
BEGIN 
UPDATE Players SET Points_Per_Game = Total_Points/Games_Played; 
END;$$ 
DELIMITER; 

玩家表:

+------------+--------------+--------------+-----------------+ 
| Name  | Games_Played | Total_Points | Points_Per_Game | 
+------------+--------------+--------------+-----------------+ 
| David  |   0 |   0 |   NULL | 
| John  |   6 |   7 |   NULL | 

Games_PlayedTotal_Points列通过bash脚本每周更新一次。

回答

0

你想要一个更新触发器,你需要参考的数据行:

DELIMITER $$ 
CREATE TRIGGER trg_Point_Per_Game 
BEFORE UPDATE ON Players 
FOR EACH ROW 
BEGIN 
    SET new.Points_Per_Game = (CASE WHEN new.Games_Played > 0 THEN new.Total_Points/new.Games_Played ELSE 0 END); 
END;$$ 
DELIMITER; 
+0

它继续在正确的,谢谢。我现在的问题是,当我更新Games_Played和Total_Points时,我得到这个错误:'不能更新存储的函数/触发器中的表'玩家',因为它已经被调用这个存储函数/触发器的语句使用。' – denski

+0

@denski。 。 。您应该修改您的问题(或询问另一个问题),以显示执行更新的代码和桌面上的其他触发器。 –

+0

这工作,我有两个问题。 1)我有两个触发器设置相同的触发器。 2)我将DECIMAL(3,3)设置为不允许更新为大于0的值。 – denski