2016-08-03 31 views
-1

我可以知道下面的MySQL觸發器有什麼作用嗎?分界符和觸發器查詢

DELIMITER ?? 
CREATE TRIGGER before_results_update 
BEFORE UPDATE ON Student_Results 
FOR EACH ROW BEGIN 
INSERT INTO Result_Changes 
SET ACTION = 'update', 
ResultID = OLD.ID, 
Result = OLD.Result, 
User = USER(), 
ChangedOn = NOW(); 
END ?? 
DELIMITER ; 

回答

1

DELIMITER創建了整個塊的分界。它使用??作爲字符串,如果你願意在整個包裝的開始和結束。最後,;被設置爲DELIMITER,我們都習慣在語句結束時輸入。 DELIMITERS不在SQLFiddle或PHPMyAdmin中使用,但它們在MySQL Workbench和其他平臺上。所以這是一個客戶端的事情。取決於你使用的是什麼。

在對錶Student_Results進行實際更新之前,它對指定5個列名的表Result_Changes執行INSERT(使用非常用的插入stmt樣式)。

UPDATE還沒有在技術上發生在Student_Results。但觸發器可以訪問要更新的行,並使用稱爲OLD的特殊「行名稱」引用它們。

FOR EACH ROW可循環1至N次。

+0

謝謝你的明確解釋@德魯。在可以預防的陳述中是否存在任何錯誤?謝謝 – gymcode

+0

沒有我能想到的。如果遇到任何問題或者通過SQLFiddle存儲模式和數據加載,我會很樂意稍後再打。 – Drew