#1442 - 无法更新表格

时间:2014-04-02 06:49:23

标签: php mysql sql triggers

每次在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',因为它已被调用此存储函数/触发器的语句使用。

2 个答案:

答案 0 :(得分:1)

答案 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
查看同一页面上用户评论下的一个示例。