每次在FinalMarks
表中插入新记录时,我都创建了一个触发器,用于插入student_marks
列中所有数字的总和。
当我尝试在表格中插入新记录时,收到以下错误消息。
请告诉我我在哪里犯了错误。
由于
塔哈
-
CREATE DEFINER = `root`@`localhost` TRIGGER `insert_student` BEFORE INSERT ON `student_marks`
FOR EACH
ROW INSERT INTO student_marks( FinalMarks )
VALUES (
AssignmentMarks + QuizMarks + Hourly1 + Hourly2 + Hourly3 + ProjectMarks
)
错误
INSERT INTO `university`.`student_marks` (
StudentMarksId
,StudentId
,SemisterCourseId
,AssignmentMarks
,QuizMarks
,Hourly1
,Hourly2
,Hourly3
,FinalMarks
,Grades
,ProjectMarks
,GPA
) 价值观( NULL,'1','1','10','15','20','15','10','','','','' )
-
#1442 - #1442 - 无法更新存储的函数/触发器中的表'student_marks',因为它已被调用此存储函数/触发器的语句使用。
答案 0 :(得分:1)
必须手动编写PHP代码才能修复此问题。
http://forums.mysql.com/read.php?99,122354,240978#msg-240978
答案 1 :(得分:1)
修改1 :
它正在进行插入工作,我还希望每当教师更新任何字段标记时触发触发器并更新FinalMarks。 - Taha Kirmani
您还需要具有相同BEFORE UPDATE
逻辑的SET
触发器
但触发器名称和类型应该不同。
示例:
DELIMITER //
CREATE DEFINER = `root`@`localhost`
TRIGGER `bu_student` BEFORE UPDATE ON `student_marks`
FOR EACH ROW
BEGIN
SET NEW.FinalMarks = NEW.AssignmentMarks + NEW.QuizMarks
+ NEW.Hourly1 + NEW.Hourly2 + NEW.Hourly3
+ NEW.ProjectMarks;
END;
//
DELIMITER ;
原始回答:
您似乎希望通过汇总插入的值来设置特定字段FinalMarks
的值。要完成此操作,您无需在表上显式执行另一个insert
语句。
相反,你可以在触发器中对字段使用SET
命令,以便它被接受。
更改:
CREATE DEFINER = `root`@`localhost`
TRIGGER `insert_student` BEFORE INSERT ON `student_marks`
FOR EACH ROW
INSERT INTO student_marks( FinalMarks )
VALUES (
AssignmentMarks + QuizMarks + Hourly1 + Hourly2 + Hourly3 + ProjectMarks
)
致:
CREATE DEFINER = `root`@`localhost`
TRIGGER `insert_student` BEFORE INSERT ON `student_marks`
FOR EACH ROW
SET NEW.FinalMarks = NEW.AssignmentMarks + NEW.QuizMarks
+ NEW.Hourly1 + NEW.Hourly2 + NEW.Hourly3
+ NEW.ProjectMarks;
请参阅:
MySQL: CREATE TRIGGER Syntax
查看同一页面上用户评论下的一个示例。