2012-02-24 114 views
2

有人可以帮我与MySQL触发如何创建MySQL触发器?

可以说我有两个表

Table_Current 
No (INT TYPE) 
Name (VARCHAR TYPE) 
Value (DECIMAL TYPE) 

Table_Record 
No (INT TYPE) 
Name (VARCHAR TYPE) 
Value (DECIMAL TYPE) 

所以我想达到的目标是,我进行更换Table.Current语句,如果价值场“值”是比Table.Record值小,我想更新Table.Record的价值,

这里是我作为触发

DELIMITER $$ 

CREATE TRIGGER Mytrigger 
AFTER INSERT ON Table_Current 

FOR EACH ROW 
BEGIN 

DECLARE CB DECIMAL (6,3); 
DECLARE OB DECIMAL (6,3); 

OB = SELECT Value FROM Table_Record WHERE Name=NEW.Name; 
CB = NEW.Value; 
IF CB<OB THEN 
UPDATE Table_Record SET Value = NEW.Value WHERE Name = NEW.Name; 
END IF; 

END $$ 
DELIMITER; 

回答

2

您可以大量简化。你所要做的实际上是这个查询

UPDATE Table_Record 

    SET `Value` = NEW.`Value` 
    WHERE `Name` = NEW.`Name` 
    AND `Value` < NEW.`Value`; 

你有兴趣在这里Table_Record = Name更新NEW.Name行。如果NEW.Value大于当前存储的大小,则只想更新。因此,如果该值限制不被满足,以上将不会更新。

这个触发代码应该做你正在努力实现的。

-- First of all, drop any other trigger with the same name 
DROP TRIGGER IF EXISTS `Mytrigger`; 

-- Create the new trigger 
DELIMITER $$ 

CREATE TRIGGER `Mytrigger` 
AFTER INSERT ON Table_Current 

FOR EACH ROW 
BEGIN 

    UPDATE Table_Record 

    SET `Value` = NEW.`Value` 
    WHERE `Name` = NEW.`Name` 
    AND `Value` < NEW.`Value`; 

END $$ 
DELIMITER; 
+0

我只是尝试这样做,我得到一个错误的说法, – 2012-02-24 11:31:27

+0

可能要再试一次specifing的错误是什么:) – 2012-02-24 11:33:17

+0

该版本的MySQL所行的支持多trigger..I我目前使用XAMPP和版本的mysql是5.0.51 – 2012-02-24 11:35:12