ЕСЛИ... ТОГДА оператор в триггере MySQL

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

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 не должен запускать курок.

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

РЕДАКТИРОВАТЬ

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

2 ответа

Решение

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

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, мне пришлось указать разделитель для |, Я оставляю это по умолчанию ;

Я надеюсь, что это помогает кому-то.

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

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

Другие вопросы по тегам