我有一个表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