我執行這個查詢:觸發到插入後更新表中的不同的一個
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
)
(值X,Y,Z是由用戶在Java應用程序給出)
它作品,在檢查他是否真正遵循課程並且考試與課程本身相關之後,必須參加考試的學生才能正確添加到表格中。我只是在考試表上進行檢查。
在考試表格中,我保留一個「學號」,告訴你有多少學生需要參加考試。每次我在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」 (建議將「Takes」更改爲「new」的用戶明顯被刪除其答案) – Paul