您好,我正在使用mysql触发器更新另一个表的插入
此触发器工作正常
CREATE TRIGGER `update_pupil_subject` AFTER INSERT ON `pupil_marks`
FOR EACH ROW
BEGIN
UPDATE pupil_subjects SET NumberOfStudens = NumberOfStudens + 1 WHERE NEW.SubjectID = SubjectID;
END$$但这会给出一个错误
CREATE TRIGGER `update_pupil_subject` AFTER INSERT ON `pupil_marks`
FOR EACH ROW
BEGIN
UPDATE pupil_subjects SET NumberOfStudens = NumberOfStudens + 1 , AverageMarks = (SELECT AVG(Marks) FROM pupil_marks WHERE NEW.StudentID = StudentID ) WHERE NEW.SubjectID = SubjectID;
END$$

如何正确编写本文,请多多指教。提前谢谢。
发布于 2013-03-23 16:56:58
显然,使用子查询时会出现问题:
您是否可以尝试拆分SQL语句:
DELIMITER $$
CREATE TRIGGER `update_pupil_subject`
AFTER INSERT
ON `pupil_marks`
FOR EACH ROW
BEGIN
DECLARE avg_marks float;
SELECT AVG(Marks)
INTO avg_marks
FROM pupil_marks
WHERE NEW.SubjectID = SubjectID;
UPDATE pupil_subjects
SET NumberOfStudens = NumberOfStudens + 1, AverageMarks = avg_marks
WHERE NEW.SubjectID = SubjectID;
END
$$编辑:使用
SHOW TRIGGERS WHERE `table` = 'pupil_marks';获取在pupil_marks上定义的所有触发器。您不能在一个事件上有多个触发器,因为所有操作都可以包含在单个触发器中。
注意:我认为AVG(Marks)是针对给定主题的,因此相应地修改了触发器定义。
发布于 2013-03-23 17:31:46
在触发器内声明一个变量,并随子查询赋值该变量
声明avg_mark integer default 0;设置avg_mark := (SELECT AVG(标记) FROM pupil_marks WHERE NEW.StudentID = StudentID);
然后在update语句中使用变量"avg_mark“...也许能行得通..。
如果不是,请选中phpmyadmin sql框下面的分隔符。应该是"$$“
https://stackoverflow.com/questions/15584805
复制相似问题