テーブルがありSCHEDULES_CLASS
、そのフィールドの 2 つはCLASS_ID
(CLASS テーブルからの外部キー)、STATUS
およびNUMBER_OF_ENROLLED_STUDENTS
です。CLASS
MAX_SEATS として 1 つのフィールドを持つ他のテーブルがあります。
NUMBER_OF_ENROLLED_STUDENTS
予定されたクラスの がそれぞれのクラスの利用可能と等しい場合、そのステータスを初期ステータスの「OPEN」から「FULL」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.
このタスクを達成する方法はありますか? つまり、登録済みの学生数が利用可能な最大席数に達するたびに、スケジュールされたクラスのステータスを「FULL」に更新します。
ありがとう