MySQL закрыла баг-долгожитель: его не могли исправить почти 20 лет

Спустя столько лет…

MySQL закрыла баг-долгожитель: его не могли исправить почти 20 лет

В MySQL наконец закрыли баг, который прожил почти два десятилетия и успел стать легендой среди разработчиков. 

Ошибка под номером #11472 была заведена еще 21 июня 2005 года. И только в 2026-м получила статус fixed.

Проблема касалась триггеров и каскадных операций FOREIGN KEY. Если запись в таблице изменялась или удалялась не напрямую, а через ON DELETE CASCADE, SET NULL или другие каскадные действия, связанные триггеры просто не срабатывали. 

При обычном UPDATE все работало корректно, но каскадные изменения обходили механизм триггеров стороной.

Для части проектов это превращалось в серьезную проблему. Разработчики годами жаловались, что ломаются аудит-логи, бизнес-логика, интеграции с поисковыми индексами и механизмы контроля целостности данных. 

Некоторые прямо писали, что из-за этого уходили с MySQL на PostgreSQL.

Баг стал мемом внутри сообщества

За 20 лет страница бага превратилась почти в форум. Пользователи ежегодно поздравляли его с «днем рождения», шутили про совершеннолетие ошибки и оставляли сообщения вроде:

«Этот баг старше меня»

«Моя девушка обещала выйти за меня после его исправления»

«Oracle не видит комментарии, потому что триггеры не срабатывают»

В обсуждении накопились сотни комментариев. Кто-то считал проблему нарушением ACID-принципов, другие спорили о сложности исправления: изменение поведения триггеров могло поломать старые системы и репликацию.

Почему исправление заняло так много времени

Судя по комментариям разработчиков MySQL, проблема упиралась не в один дефект, а в архитектуру InnoDB. Исправление требовало менять механизм обработки FOREIGN KEY и триггеров одновременно.

Еще в 2013 году представители MySQL предупреждали, что это «не будет простым баг-фиксом». А в 2020-м участники обсуждения объясняли, что резкое изменение поведения могло вызвать несовместимости в старых проектах, особенно при statement-based replication.

В итоге баг закрыли как часть задачи WL#17024 «Activate triggers on referencing tables during foreign key CASCADE».

Финал у истории получился почти трогательным

После закрытия бага один из пользователей написал:

«Но кому теперь мы будем покупать торт каждый год?»

А автор оригинального репорта Omer Barnir, который создал тикет еще в 2005 году, ответил:

«Торты все еще приветствуются ;-)»

Успейте: скидка 15% до 29 мая

Пока следите за новостями — держите промокод Практикума на любой платный курс: по ссылке (можно просто нажать). Даёт скидку 15% при покупке, плюс дополнительно 5 мини-курсов и 5 книг стоимостью ~75 000 ₽. Но только до 29 мая — потом всё, промокод сгорит.

Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям, начать можно в любой момент, карту привязывать не нужно, если что.

Соцсети: Юлия Зубарева
Через год — лучше работа, выше зарплата
В «Яндекс Практикуме» становятся разработчиками с нуля. Выберите язык — веб, Python, Java, C++ — и учитесь. Джуны зарабатывают от 80 000 ₽, мидлы — от 150 000 ₽. Дальше — программы трудоустройства и компенсация, если пойдёте в Яндекс.
Через год — лучше работа, выше зарплата Через год — лучше работа, выше зарплата Через год — лучше работа, выше зарплата Через год — лучше работа, выше зарплата
Вам может быть интересно
easy