我有一個表SCHEDULES_CLASS
,其中的2個字段是CLASS_ID
(CLASS表的外鍵),STATUS
和NUMBER_OF_ENROLLED_STUDENTS
。我有其他表CLASS
有1個字段MAX_SEATS。更新mysql中觸發器中的同一行
當預定班級中的NUMBER_OF_ENROLLED_STUDENTS
等於可用於各個CLASS的MAX_SEATS
時,我需要將該SCHEDULES_CLASS
的狀態從初始狀態變爲「FULL」,即「OPEN」。
我創建了一個觸發這一目的如下:
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.
任何想法,如何完成這項任務?即,只要登記的學生人數達到最大可用座位,就將預定班級的狀態更新爲「滿」。
感謝
爲什麼你不在業務層而不是使用觸發器做到這一點? – CodeZombie 2012-07-14 12:39:11
我正在做這個在php + mysql中,調用mysql的查詢。我認爲這是一次固定條件下的更新,觸發器將是一個很好的選擇。謝謝。 – mtk 2012-07-14 13:19:55