尝试在 MySQL 中创建触发器时出现 2 个问题
2 problems when trying to create a trigger in MySQL
我试图了解 MySQL 中的触发器,但遇到了一些问题。
我正在尝试实现一个触发器,它在 table 成绩中的每个 UPDATE/INSERT 上更新另一个名为 Student 的 table 中的“gpa”列,但无法执行正确。
代码:
CREATE TABLE Student
(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30),
age TINYINT,
gpa NUMERIC(3, 2) DEFAULT 2
);
CREATE TABLE Grades
(
StudentId INT PRIMARY KEY,
grade_bg INT,
grade_math INT,
grade_subd INT,
FOREIGN KEY(StudentId) references Student(Id)
);
delimiter |
CREATE TRIGGER update_gpa
AFTER INSERT
ON Grades
FOR EACH ROW
BEGIN
UPDATE Student SET gpa = ((grade_bg + grade_math + grade_subd)/3) WHERE StudentId = Id;
END;
|
在此之后,当我尝试插入 table 学生时,我得到:
“错误 1054:where 子句中的未知列 'StudentId'”。
例如:
INSERT INTO Student(name, age)
VALUES ('Joshua', 17);
另外,当我尝试编写 "AFTER INSERT, UPDATE" 时,我从 MySQL Workbench 中收到语法错误并且不知道如何使触发器在 table 年级的插入和更新时激活。
感谢任何帮助!提前致谢!
我不太了解触发器,但我只尝试了 运行 更新语句,发现您没有定义连接:-
UPDATE Student
INNER JOIN Grades ON Grades.StudentId = Student.Id
SET Student.gpa = ((Grades.grade_bg + Grades.grade_math + Grades.grade_subd)/3);
我试图了解 MySQL 中的触发器,但遇到了一些问题。
我正在尝试实现一个触发器,它在 table 成绩中的每个 UPDATE/INSERT 上更新另一个名为 Student 的 table 中的“gpa”列,但无法执行正确。
代码:
CREATE TABLE Student
(
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30),
age TINYINT,
gpa NUMERIC(3, 2) DEFAULT 2
);
CREATE TABLE Grades
(
StudentId INT PRIMARY KEY,
grade_bg INT,
grade_math INT,
grade_subd INT,
FOREIGN KEY(StudentId) references Student(Id)
);
delimiter |
CREATE TRIGGER update_gpa
AFTER INSERT
ON Grades
FOR EACH ROW
BEGIN
UPDATE Student SET gpa = ((grade_bg + grade_math + grade_subd)/3) WHERE StudentId = Id;
END;
|
在此之后,当我尝试插入 table 学生时,我得到: “错误 1054:where 子句中的未知列 'StudentId'”。
例如:
INSERT INTO Student(name, age)
VALUES ('Joshua', 17);
另外,当我尝试编写 "AFTER INSERT, UPDATE" 时,我从 MySQL Workbench 中收到语法错误并且不知道如何使触发器在 table 年级的插入和更新时激活。
感谢任何帮助!提前致谢!
我不太了解触发器,但我只尝试了 运行 更新语句,发现您没有定义连接:-
UPDATE Student
INNER JOIN Grades ON Grades.StudentId = Student.Id
SET Student.gpa = ((Grades.grade_bg + Grades.grade_math + Grades.grade_subd)/3);