[英]Changing an update trigger to insert trigger in MySQL
I am a beginner and studying about trigger to calculate grade of students from this link. 我是一个初学者,正在研究有关如何通过此链接计算学生成绩的触发器。 Student_Marks Trigger The query for before update trigger works fine.
Student_Marks触发器 更新前 触发器的查询工作正常。 I was trying to change the trigger a little bit.
我试图改变一下触发器。 I want to calculate the Grade after inserting marks of a student.
我想在插入学生分数后计算成绩。 Hence, after trigger instead of update .
因此,触发后而不是更新 。 I got stuck.
我被困。
My query is as follows: 我的查询如下:
DELIMITER
$$
CREATE TRIGGER `student_marks`
AFTER INSERT
ON student FOR EACH ROW
BEGIN
SET NEW.Total =NEW.SUB1+NEW.SUB2+NEW.SUB3+NEW.SUB4+NEW.SUB5;
SET NEW.Percentage = NEW.Total/5;
IF NEW.Percentage >=90 THEN
SET NEW.Grade = 'EXCELLENT';
ELSEIF NEW.Percentage>=75 AND NEW.Percentage<90 THEN
SET NEW.Grade = 'VERY GOOD';
ELSEIF NEW.Percentage>=60 AND NEW.Percentage<75 THEN
SET NEW.Grade = 'GOOD';
ELSEIF NEW.Percentage>=40 AND NEW.Percentage<60 THEN
SET NEW.Grade = 'AVERAGE';
ELSE SET NEW.Grade = 'NOT PROMOTED';
END IF;
END;
$$
You have to use BEFORE INSERT
instead of AFTER INSERT
to save the calculated value of the new row. 您必须使用
BEFORE INSERT
而不是AFTER INSERT
来保存新行的计算值。 You can't affect the row AFTER INSERT
because the row is already saved. 您不能影响
AFTER INSERT
行,因为该行已经保存。
DELIMITER $$
CREATE TRIGGER `student_marks`
BEFORE INSERT ON student_marks FOR EACH ROW
BEGIN
SET NEW.Total =NEW.SUB1+NEW.SUB2+NEW.SUB3+NEW.SUB4+NEW.SUB5;
SET NEW.Percentage = NEW.Total/5;
IF NEW.Percentage >=90 THEN
SET NEW.Grade = 'EXCELLENT';
ELSEIF NEW.Percentage>=75 AND NEW.Percentage<90 THEN
SET NEW.Grade = 'VERY GOOD';
ELSEIF NEW.Percentage>=60 AND NEW.Percentage<75 THEN
SET NEW.Grade = 'GOOD';
ELSEIF NEW.Percentage>=40 AND NEW.Percentage<60 THEN
SET NEW.Grade = 'AVERAGE';
ELSE
SET NEW.Grade = 'NOT PROMOTED';
END IF;
END;
$$
You also need to change the table name for the TRIGGER
(use INSERT ON student_marks
instead of INSERT ON student
). 您还需要更改
TRIGGER
的表名(使用INSERT ON student_marks
而不是INSERT ON student
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.