首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从触发器MySQL更新多个列

如何从触发器MySQL更新多个列
EN

Stack Overflow用户
提问于 2013-03-23 16:25:51
回答 2查看 6.2K关注 0票数 2

您好,我正在使用mysql触发器更新另一个表的插入

此触发器工作正常

代码语言:javascript
复制
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$$

但这会给出一个错误

代码语言:javascript
复制
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$$

如何正确编写本文,请多多指教。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-23 16:56:58

显然,使用子查询时会出现问题:

您是否可以尝试拆分SQL语句:

代码语言:javascript
复制
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
$$

编辑:使用

代码语言:javascript
复制
SHOW TRIGGERS WHERE `table` = 'pupil_marks';

获取在pupil_marks上定义的所有触发器。您不能在一个事件上有多个触发器,因为所有操作都可以包含在单个触发器中。

注意:我认为AVG(Marks)是针对给定主题的,因此相应地修改了触发器定义。

票数 1
EN

Stack Overflow用户

发布于 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框下面的分隔符。应该是"$$“

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15584805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档