ЕСЛИ ... ТОГДА оператор в триггере MySQL - PullRequest
0 голосов
/ 29 марта 2012

У меня есть две таблицы:

table A
 id | level_ID | col_m | col_n

table B
 id | prev_ID | cur_ID

table A управляется со стороны приложения, где выполняются новые вставки и обновления.С другой стороны, table B имеет значения, вставленные после обновления только в level_ID столбце table A с помощью триггера:

DELIMITER |
DROP TRIGGER IF EXISTS trigger_happy|
CREATE TRIGGER trigger_happy AFTER UPDATE ON table A
FOR EACH ROW
  BEGIN
    IF level_ID!=NEW.level_ID THEN
    INSERT INTO table B (id, cur_ID, prev_ID)
    VALUES (OLD.id, NEW.level_ID, OLD.level_ID)
  END IF;
END;
DELIMITER ;

Проблема заключается в том, что я намерен запускать триггер только при наличииизменение в столбце level_IDОбновление других столбцов col_m и col_n не должно запускать триггер.

Помогите мне с моим оператором триггера, потому что он не работает как есть.

EDIT

Обновление столбцов выполняется в разное время в логике приложения.Мне нужно, чтобы триггер срабатывал ТОЛЬКО после обновления level_ID.

Ответы [ 2 ]

0 голосов
/ 31 марта 2012

Решение, которое я нашел подходящим для меня, выглядит следующим образом:

DELIMITER |
DROP TRIGGER IF EXISTS trigger_happy|
CREATE TRIGGER trigger_happy AFTER UPDATE ON table A
FOR EACH ROW
  BEGIN
    IF NEW.level_ID!=OLD.level_ID THEN /* edit conditional statement */
    INSERT INTO table B (id, cur_ID, prev_ID)
    VALUES (OLD.id, NEW.level_ID, OLD.level_ID)
  END IF;
END;
| /* add delimiter */
DELIMITER ;

Этот триггер сравнивает только изменения в столбце level_ID и срабатывает после обновления.Поскольку я использую phpmyadmin, мне пришлось указать разделитель на |.Я оставлял его по умолчанию ;

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 29 марта 2012

Очень просто, вам нужно запустить два обновления.

Для одного обновления потребуется триггер в столбце level_ID.Второе обновление обновит столбцы col_m и col_n без связанного триггера.

...