2009-10-28 93 views
4

舉個例子,說我有這些表...MySQL的觸發與SELECT語句

人(ID,currentyear)

personteam(ID,工作年,隊)

一個人是每一年他們都在一家公司工作。 'personteam'存儲了團隊的記錄。只有'person'中的'currentyear'字段等於'personteam'中的'workyear'時,才允許插入「personteam」。

我想根據PERSON中存儲的內容,在用戶插入到PERSON_TEAM時執行一些檢查。所以我正在用select語句寫一個觸發器。我不是在MySQL的語法確保100%的觸發,所以希望這是有道理的......

CREATE TRIGGER mytesttrigger BEFORE INSERT ON personteam

FOR EACH ROW

SELECT currentyear AS @variablename 
FROM person p 
WHERE p.id = NEW.id 

IF @variablename != NEW.workyear 
ERROR 

END

任何人都可以爲這樣的操作提供一個修正,更正的語法嗎?

謝謝。

(這個例子是微不足道的,所以我可以學到請原諒如何無意義聽起來可能)

+1

現在假設...... FOR EACH ROW BEGIN SET @variablename =(SELECT currentyear由人P其中p.id = NEW.id); IF @variablename!= NEW.workyear THEN ERROR; ENDIF; END; – ajr 2009-10-28 23:10:42

回答

3

根據MySQL的標準,來處理這個正確的方式將是SIGNAL命令拋出異常回客戶。由於這是一個BEFORE觸發器,觸發器中的錯誤將阻止mysql繼續前進並插入該行。

但是,mysql還不支持SIGNAL,所以我們必須想出一種導致任意錯誤的方法。

這樣做的一種方法是調用一個不存在的過程,as demonstrated here

一個更好的辦法是從這個表中刪除INSERT權限,而是使用存儲過程爲你處理插入。