Как создать MySQL Trigger? - PullRequest
       3

Как создать MySQL Trigger?

2 голосов
/ 24 февраля 2012

Может кто-нибудь помочь мне с триггером 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, и если значение поля 'Value' меньше значения поля 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;

1 Ответ

2 голосов
/ 24 февраля 2012

Вы можете значительно упростить это. То, что вы пытаетесь сделать, это эффективно этот запрос

    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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...