2012-09-11 58 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的默认值,然后运行一个过程来随时更新它,然后你的触发器会在非空字段更新后执行?