ЕСЛИ... ТОГДА оператор в триггере 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 без связанного триггера.