无法在mysql中创建触发器

Posted

技术标签:

【中文标题】无法在mysql中创建触发器【英文标题】:can't create a trigger in mysql 【发布时间】:2013-12-12 09:37:14 【问题描述】:

我正在尝试创建触发器,但某处出现错误,因为我是新手,所以无法解决它...

所以基本上我有两张桌子:

students(stud_num:INT, grade_avg :real)

grading(stud_num:INT, classe:char(5), grade:int)

在学生中stud_num 是主键,在评分时它引用学生表..

我的教授想要我创建一个触发器,每次我们在评分中插入成绩时,grade_avg 都会在学生中更新。


这是我目前所拥有的:

DELIMITER %%

创建触发器

插入分级后

每行开始

@stud_num=new.stud_num;

更新学生

SET Grade_avg=(SELECT AVG(grade) FROM grading WHERE stud_num=@stud_num);

结束;

%%

有人可以帮帮我吗?

【问题讨论】:

而错误信息是.... 根据 mysql 在 '@stud_num=new.stud_num;' 中出现语法错误 【参考方案1】:

问题在于您使用用户定义变量的方式,而您实际上并不需要它,因此您可以使用new.stud_num 代替@stud_num 来跳过它。

您还应该将更新语句限制为仅更新相关学生的行,而不是所有行。

DELIMITER %%

CREATE TRIGGER something

AFTER INSERT ON grading

FOR EACH ROW BEGIN

UPDATE students
SET grade_avg=(
  SELECT AVG(grade) 
  FROM grading 
  WHERE stud_num=new.stud_num
)
WHERE stud_num=new.stud_num;

END;

%%

DELIMITER ;

【讨论】:

以上是关于无法在mysql中创建触发器的主要内容,如果未能解决你的问题,请参考以下文章

mysql在存储过程中创建触发器

怎么在Dbeaver中创建mysql 触发器

在 mysql 中创建触发器时出现错误“1064”?

使用 Where 子句在 MySql 中创建触发器

我可以在 rds 数据库中创建触发器吗?

在 MySQL 上触发