Я новичок в триггерах MySQL.Предположим, если у меня есть имя таблицы teacher содержит
teacher_id,
teacher_name,
description,
student_id,
class,
student_year
Я хочу создать триггеры AFTER INSERT и AFTER UPDATE на таблице преподавателей.для этого у меня есть имя таблицы с именем teacherlogs с id, teacher_id, student_year, class, student_id столбцы
, поэтому всякий раз, когда запись вставляется в таблицу teacher , она должна быть вставлена в teacherlogs . (Для этого триггера, способного писать)
Но для проблемы, возникшей после обновления триггера.
Требование :
всякий раз, когда student_id изменено в teacher таблице, мы должны вставить запись в teacherlogs вместе с другими изменениями в столбцах таблицы учителя для этой записи, для этого я написал так:
IF ((NEW.student_id <=> OLD.student_id) = 0) Then
select student_id,class,student_year into student_id_,class_,year_ from `employees`.`teachers` where teacher_id = OLD.teacher_id;
Insert into `employees`.`teacherlogs`(teacher_id,student_year,class,student_id) values (OLD.teacher_id,year_,class_,student_id_);
END IF;
Но всякий раз, когда изменения в других столбцах, таких как class, student_year, нам нужно обновить таблицу teacherlogs для этой записи, где teacher_id и student_id
Final TriggerЗапрос
create trigger `updateteacherlogs`
AFTER UPDATE ON `employees`.`teacher` FOR EACH ROW
BEGIN
DECLARE teacher_id_ int(11);
Declare student_id_ int(11);
Declare class_ varchar(150);
Declare year_ int(11);
Declare dummy tinyint;
IF ((NEW.student_id <=> OLD.student_id) = 0) Then
select student_id,class,student_year into student_id_,class_,year_ from `employees`.`teachers` where teacher_id = OLD.teacher_id;
Insert into `employees`.`teacherlogs`(teacher_id,student_year,class,student_id) values (OLD.teacher_id,year_,class_,student_id_);
ELSE
CASE WHEN (NEW.student_year <=> OLD.student_year) = 0
THEN update `teacherlogs` set student_year = NEW.student_year where student_id=OLD.student_id and teacher_id = OLD.teacher_id;
WHEN (NEW.class <=> OLD.class) = 0
THEN update `teacherlogs` set class = NEW.class where student_id=OLD.student_id and teacher_id = OLD.teacher_id
ELSE select @dummy END
end if;
END
Но в конце я получаю исключение, если.
- это правильный способ решения моей проблемы или каким-либо другим способом мы можем это сделать?