2012-02-24 4 views
2

Может кто-то пожалуйста, помогите мне с MySQL TriggerКак создать MySQL Trigger?

Допустим, у меня есть две таблицы

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

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

Так что я хочу добиться того, что я выполняю заменить заявления на Table.Current, и если значение поле «Value» меньше, чем значение в 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

Я просто попытался это, я получаю сообщение об ошибке сказав, –

+0

Может хочет попробовать это снова задав то, что ошибка :) –

+0

Этой версия MySQL поддерживает несколько делает trigger..I я в настоящее время с помощью XAMPP и версий mysql - 5.0.51 –