Суть ошибки заключалась в том, что при каскадных изменениях через внешние ключи MySQL обновлял строки в дочерних таблицах, но не запускал для них триггеры.
Например, если в родительской таблице удаляли запись, то в дочерней таблице срабатывал ON DELETE SET NULL или ON DELETE CASCADE, и данные в ней действительно менялись.
При этом триггер AFTER UPDATE или AFTER DELETE, который разработчик ожидал увидеть при таком изменении, не запускался. Разработчики отмечают, что это давнее архитектурное ограничение MySQL.
Всё из-за того, что каскадные операции внешних ключей выполняются внутри InnoDB, а триггеры находятся на SQL-уровне.
Возможность исправить этот баг появилась только в MySQL 9.6, когда команда перенесла обработку внешних ключей на SQL-уровень.
Лучшие комментарии (0)