Триггер не может воздействовать на таблицу, по которой он был запущен. Это типичное ограничение в SQL, которое в основном предназначено для предотвращения бесконечного l oop при вызове (запрос запускает триггер, выполняет запрос, запускает триггер и т. Д.).
Здесь вместо фактического хранения этой производной информации я бы порекомендовал использовать представление, которое вычисляет столбец на лету при запросе.
Если вы работаете MySQL 8.0:
create view costs_view as
select
id,
utility,
tax,
row_number() over(order by id desc) = 1 active,
created_at,
updated_at
from costs
В более ранних версиях:
create view costs_view as
select
id,
utility,
tax,
id = (select max(id) from costs) active,
created_at,
updated_at
from costs
Это дает вам всегда актуальный столбец, который вам просто не нужно поддерживать.