2012-09-11 60 views
3

我的觸發器有點問題。 我創建了一個觸發器:MySQL觸發器不起作用

BEGIN 

IF((SELECT `Wert` 
    FROM parameter_history 
    WHERE `BusNr` = NEW.BusNr AND `MesswertNr` = NEW.MesswertNr 
    ORDER BY `Timestamp` DESC LIMIT 1) != NEW.Value) 


THEN 
    INSERT INTO parameter_history (`BusNr`, `MesswertNr`, `Value`) 
    VALUES (NEW.BusNr, NEW.MesswertNr, NEW.Value); 
END IF; 

END 

觸發器的事件是更新後。 如果已經有New.Value它工作得很好。 但如果在我的數據庫中沒有New.Value它不起作用,我不知道爲什麼。 問題是,當我的表中實際上沒有條目時,我無法從「NEW.Value」中取回值。 隨着MySQL程序我得到了「0行發現」,我想解決這個問題。

任何人都可以幫助我嗎?

親切的問候

+1

這將是更好,如果你添加了整個觸發代碼:'CREATE TRIGGER ...' –

+0

我通過外部PROGRAMM創建觸發器 - heidisql – user1661995

+0

您可以運行'SHOW CREATE TRIGGER trigger_name'命令來獲取整個觸發代碼。 – Devart

回答

0

當然,它的工作原理,如果已經有一個NEW.value看看你的說法,

IF((select x) != NEW.Value) // select x only when it does not equal 
//what the current value of New.Value is. 

THEN // preform my insert statement. 
    INSERT INTO parameter_history (`BusNr`, `MesswertNr`, `Value`) 
    VALUES (NEW.BusNr, NEW.MesswertNr, NEW.Value); 

END IF; 

現在考慮New.Value不存在或爲空的情況下(空),你正在運行,只有當它不等於時才選擇x 。

您將返回0行。

我不太清楚你在建什麼,但爲什麼不使用New.Value的默認值,然後運行一個過程來隨時更新它,然後你的觸發器會在非空字段更新後執行?