2012-02-24 113 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