Я выполнения этого запроса:Trigger обновить таблицу после вставки в другой один
INSERT INTO Takes(Student_SSN_N,Exam_Couse_ID,Exam_ID)
SELECT "xxx", "y", "z"
FROM Student as S, Exam as E
WHERE EXISTS (SELECT *
FROM Follows
WHERE S.Student_SSN = "xxx"
AND S.Student_SSN = Follows.Student_SSN_N
AND Follows.Course_ID = y
)
AND EXISTS (SELECT *
FROM Follows
WHERE Follows.Course_ID = y
AND E.Course_ID = y
AND E.Exam_ID = z
)
(Значения х, у, г задаются пользователем в приложении Java)
It работает, студент, который должен сдать экзамен, правильно добавляется в таблицу после проверки, действительно ли он следует за курсом, и если экзамен относится к самому курсу. Я просто выполняю чек на таблице Экзамена.
В таблице экзамена я поддерживаю «номер студента», в котором рассказывается, сколько студентов нужно сдать экзамен. Я хочу обновлять этот номер каждый раз, когда я вставляю нового ученика в таблицу Takes. Так я думал об использовании триггера, и я написал это:
DELIMITER $$
CREATE TRIGGER `Takes_after_insert` AFTER INSERT ON `Takes`
FOR EACH ROW
UPDATE Exam
SET Exam.Student_Num = Exam.Student_Num + 1
WHERE Takes.Course_ID = Exam.Course_ID and
Take.Exam_ID = Exam.Exam.ID;
Это простой триггер (я не изучал ничего более сложного пока). Но я получаю эту ошибку:
Error Code: 1442. Can't update table 'Exam' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
(я также попытался указывая на спусковой крючок на другой стол, чтобы посмотреть, если логика его не так, и он работал)
Хорошо, я не могу обновить таблицу экзаменов, потому что я использую его в запросе, запускающем триггер. Но как я могу обновить таблицу?
Такая же ошибка, я изменил «Takes.Course_ID» на «new.Course_ID» и «Takes.Exam_ID» на «new.Exam_ID» в триггере (пользователь, который предложил изменить «принимает» на «новый», по-видимому, удален его ответ) – Paul