2012-02-24 18 views
2

誰かがMySQLのトリガーMySQLトリガーを作成するには?

で私を助けてくださいことができますので、私が達成したいことはことを、私はTable.Current上の文を置き換える実行し、の値ならばです私は2つのテーブル

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

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

を考えてみましょうフィールド「値が」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_RecordName = 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

、私が手にエラーが –

+0

は、エラーが –

+0

のMySQLのこのバージョンはサポートしてdoest :)で何specifingもう一度それをしようとする場合があります、と言って、複数のtrigger..I現在XAMPPとバージョンを使用していますmysqlのバージョンは5.0.51です。 –

関連する問題