Триггер MySQL - добавление из отдельной таблицы

У меня две таблицы:

CREATE TABLE `class` (
  `id` int(11) NOT NULL,
  `class_no` int(11) NOT NULL,
  `class_title` varchar(11) NOT NULL,
  `no_of_students` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `enrolment` (
  `id` int(11) NOT NULL,
  `ssn` varchar(11) NOT NULL,
  `class_no` int(11) NOT NULL,
  `grade` varchar(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Я пытаюсь сделать, когда кто-то входит в «Зачисление», если введенный номер класса совпадает с записью в «Классе», например, номер класса 2 - тогда я хочу, чтобы то, что введено в оценку в «Зачислении» (например, 5), соответствовало прибавьте к тому, что уже есть в количестве учеников (скажем, 10). В этом случае количество студентов будет 15. Это текущий триггер, который у меня есть, но он не добавляет:

DELIMITER $$
CREATE TRIGGER `after_insert_add_one` AFTER INSERT ON `enrolment` FOR EACH ROW UPDATE class
 SET class.no_of_students = class.no_of_students + enrolment.grade WHERE class_no = NEW.class_no
$$
DELIMITER ;

Если кто знает, буду благодарен за помощь.

#
Источник
  • 0
    это должно быть NEW.grade , а не enrollemnt.grade
Codelisting
за 0 против
Лучший ответ

Вы не вносите изменений сSET class.no_of_students = class.no_of_students + enrolment.grade если вы не используете enrolment.class_no для сравнения, используя предложение where. Обновите его с помощью NEW вместо регистрации, если вы его используете:

DELIMITER $
CREATE TRIGGER `after_insert_add_one` AFTER INSERT ON `enrolment` FOR EACH ROW UPDATE class
 SET class.no_of_students = class.no_of_students + NEW.grade WHERE class_no = NEW.class_no
$
DELIMITER ;
за 2 против

Вы должны использоватьNEW ключ вместо имени таблицыenrolment , попробуй это

CREATE TRIGGER `after_insert_enrolment` AFTER INSERT ON `enrolment`
 FOR EACH ROW BEGIN
    UPDATE class c  
    SET  
        c.no_of_students = c.no_of_students + NEW.grade   
    WHERE c.class_no = NEW.class_no;
END
Codelisting
Популярные категории
На заметку программисту