更改更新触发器以在 MySQL 中插入触发器
Changing an update trigger to insert trigger in MySQL
我是初学者,正在研究如何从这个 link 计算学生成绩的触发器。 Student_Marks Trigger
before update 触发器的查询工作正常。我试图稍微改变一下触发器。我想在插入学生的分数后计算成绩。 因此,after 触发而不是 update。我卡住了。
我的查询如下:
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;
$$
您必须使用 BEFORE INSERT
而不是 AFTER INSERT
来保存新行的计算值。您不能影响行 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;
$$
您还需要更改 TRIGGER
的 table 名称(使用 INSERT ON student_marks
而不是 INSERT ON student
)。
我是初学者,正在研究如何从这个 link 计算学生成绩的触发器。 Student_Marks Trigger before update 触发器的查询工作正常。我试图稍微改变一下触发器。我想在插入学生的分数后计算成绩。 因此,after 触发而不是 update。我卡住了。
我的查询如下:
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;
$$
您必须使用 BEFORE INSERT
而不是 AFTER INSERT
来保存新行的计算值。您不能影响行 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;
$$
您还需要更改 TRIGGER
的 table 名称(使用 INSERT ON student_marks
而不是 INSERT ON student
)。