2017-02-09 76 views
0

所以我有2個表格。 1是高爾夫球場,另一個是那些球場上的每個洞。所以表golf_courses有5個記錄(5個高爾夫球場)。表golf_holes有5個課程(90個記錄)的18個記錄。我創建了一個觸發器,我相信在刪除課程時會刪除18個洞。但我不知道如何運行它。我已經創建了一個從2個表中刪除的觸發器。我如何執行觸發器?

這裏是我的觸發器:

Delimiter $$ 
CREATE TRIGGER remove_course 
AFTER DELETE ON golf_courses 
FOR EACH ROW 
BEGIN 
    DELETE FROM golf_holes 
     WHERE golf_holes.golf_id = old.golf_id; 
END $$ 
DELIMITER ; 

如何運行/調用此觸發?

+0

對不起,沒有意識到線纏...... – PSDockery

+0

分隔符$$ CREATE TRIGGER remove_course AFTER DELETE ON golf_courses FOR EACH ROW BEGIN DELETE FROM golf_holes WHERE golf_holes.golf_id = old.golf_id; END $$ DELIMITER; – PSDockery

+0

觸發這個詞應該與觸發*相關聯,因爲某些事情會發生,這意味着你不執行它。您可以執行程序(因此您可以手動調用它來執行單詞存儲過程)。觸發器獲得**觸發**。你甚至寫了它的body,它表示'AFTER DELETE' - 這意味着它在刪除發生後得到**觸發**。當時間組件滿足時,事件就會被執行。我不知道你是什麼使你困惑,但是因爲你知道你需要觸發器以及如何創建它......很奇怪,你不知道它是如何工作的,或者它爲什麼工作。 –

回答

0

觸發器是自動的,它應該在指定的表上執行指定操作時運行;在這種情況下,當您從golf_courses刪除。

+0

好的,那麼它不工作。我輸入:DELETE FROM golf_courses WHERE golf_id = 1;它從第一張桌子上刪除了高爾夫球場,但從第二張桌子上刪除了18洞 – PSDockery

+0

golf_holes.golf_id引用golf_courses.golf_id時是否存在外鍵約束?如果是這樣,約束可能有一個'ON DELETE SET NULL'子句,在觸發器執行之前將這些1更改爲空值;這就是Alfabravo的回答建議使用「BEFORE DELETE」觸發器的原因。 – Uueerdo

0

它將在golf_courses上的每個刪除操作上自動調用。我將它設置爲執行before delete,因爲有可能是具有子表(golf_holes)與相關行讓你從刪除行該表上影響制約