LurkHub Community

Cover image for Разрабы просто троллили сообщество, чтобы была какая-то изюминка 😨
Fsociety
Fsociety

Опубликовано

Разрабы просто троллили сообщество, чтобы была какая-то изюминка 😨

Суть ошибки заключалась в том, что при каскадных изменениях через внешние ключи MySQL обновлял строки в дочерних таблицах, но не запускал для них триггеры.

Например, если в родительской таблице удаляли запись, то в дочерней таблице срабатывал ON DELETE SET NULL или ON DELETE CASCADE, и данные в ней действительно менялись.

При этом триггер AFTER UPDATE или AFTER DELETE, который разработчик ожидал увидеть при таком изменении, не запускался. Разработчики отмечают, что это давнее архитектурное ограничение MySQL.

Всё из-за того, что каскадные операции внешних ключей выполняются внутри InnoDB, а триггеры находятся на SQL-уровне.

Возможность исправить этот баг появилась только в MySQL 9.6, когда команда перенесла обработку внешних ключей на SQL-уровень.

Лучшие комментарии (0)