我有一个表SCHEDULES_CLASS
,其中 2 个字段是CLASS_ID
(来自 CLASS 表的外键)STATUS
和NUMBER_OF_ENROLLED_STUDENTS
. 我有其他表CLASS
有 1 个字段作为 MAX_SEATS。
当NUMBER_OF_ENROLLED_STUDENTS
预定课程中的课程等于MAX_SEATS
相应课程的可用课程时,我需要将其状态SCHEDULES_CLASS
从初始状态“打开”更改为“已满”。
为此,我创建了一个触发器,如下所示:
USE mydb;
DELIMITER ##
dROP TRIGGER IF EXISTS updateClassStatusTrigger ##
CREATE TRIGGER updateClassStatusTrigger
BEFORE UPDATE ON SCHEDULED_CLASS
FOR EACH ROW
BEGIN
UPDATE SCHEDULED_CLASS SET STATUS="FULL" WHERE CLASS_ID=NEW.CLASS_ID
AND EXISTS (SELECT 1 FROM SCHEDULED_CLASS sc, CLASS cl WHERE cl.CLASS_ID=NEW.CLASS_ID AND NEW.NUMBER_OF_ENROLLED_STUDENTS=cl.MAX_SEATS);
END##
我正在使用 phpmyadmin,当 SCHEDULED_CLASS 表上发生任何更新时,我收到以下错误:
#1442 - Can't update table 'SCHEDULED_CLASS' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
任何想法,如何完成这项任务?即,每当注册的学生人数达到最大可用座位时,将预定班级的状态更新为“已满”。
谢谢