Открыть сервис

MySQL 5.0

MySQL 5.0 — это одна из основных версий свободной реляционной системы управления базами данных (СУБД) MySQL, выпущенная 22 октября 2005 года. Данная версия стала значительным этапом в развитии продукта, поскольку в ней были реализованы такие ключевые возможности, как поддержка хранимых процедур, триггеров, представлений и курсоров, что приблизило MySQL по функциональности к коммерческим СУБД того времени.

История

Разработка MySQL 5.0 велась компанией MySQL AB (Швеция) в течение нескольких лет. Первые альфа-версии появились в декабре 2004 года, бета-версии — в марте 2005 года, а релиз-кандидаты — летом 2005 года. Финальный стабильный релиз (5.0.15) был выпущен 22 октября 2005 года. Версия 5.0 стала последней крупной версией, разработанной под руководством MySQL AB до её поглощения корпорацией Sun Microsystems в 2008 году.

Основным нововведением, анонсированным ещё в 2003 году, была поддержка хранимых процедур и триггеров — функций, давно доступных в таких СУБД, как Oracle Database и Microsoft SQL Server. Реализация этих возможностей в MySQL 5.0 была встречена сообществом с интересом, но также и с критикой из-за ограниченной функциональности и отличий от стандарта SQL.

Ключевые возможности

Хранимые процедуры и функции

MySQL 5.0 ввела поддержку хранимых процедур и функций, написанных на языке SQL. Процедуры могли принимать параметры (IN, OUT, INOUT) и возвращать результаты. Реализация основывалась на стандарте SQL:2003, но имела ряд отличий, например, отсутствие поддержки RETURN в процедурах (вместо этого использовался OUT-параметр). Функции, в отличие от процедур, могли возвращать скалярное значение.

Триггеры

Триггеры в MySQL 5.0 позволяли автоматически выполнять набор SQL-операторов при вставке, обновлении или удалении строк в таблице. Поддерживались только триггеры для одной строки (FOR EACH ROW), а не для всей операции. Триггеры могли быть определены как до (BEFORE), так и после (AFTER) события. Максимальное количество триггеров на таблицу было ограничено шестью (по одному на каждое сочетание времени и события).

Представления (VIEW)

Представления в MySQL 5.0 реализовывались как виртуальные таблицы, основанные на результатах запроса SELECT. Они могли быть обновляемыми (если запрос удовлетворял определённым условиям) или необновляемыми. Представления упрощали работу с данными, скрывая сложные запросы и предоставляя доступ к подмножествам данных.

Курсоры

Курсоры в MySQL 5.0 позволяли обрабатывать результирующие наборы построчно, что было необходимо для хранимых процедур. Курсоры были только однонаправленными (только вперёд) и не поддерживали обновление данных через них. Они были реализованы как чувствительные (sensitive), то есть изменения в базе данных сразу отражались на курсоре.

Информационная схема (INFORMATION_SCHEMA)

MySQL 5.0 ввела поддержку стандартной информационной схемы, которая предоставляла метаданные о базах данных, таблицах, столбцах, индексах и других объектах через набор системных представлений. Это позволяло получать информацию о структуре базы данных без использования специфических команд SHOW.

Архитектура и хранение данных

MySQL 5.0 поддерживала несколько подсистем хранения (storage engines), каждая из которых имела свои особенности:

  • MyISAM — подсистема по умолчанию для таблиц, не поддерживающая транзакции, внешние ключи и блокировки на уровне строк. Обеспечивала высокую скорость чтения.
  • InnoDB — транзакционная подсистема с поддержкой ACID, внешних ключей и блокировок на уровне строк. Стала популярной для приложений, требующих целостности данных.
  • MEMORY (HEAP) — хранила данные в оперативной памяти, что обеспечивало высокую скорость, но данные терялись при перезапуске сервера.
  • MERGE — объединяла несколько таблиц MyISAM в одну логическую таблицу.
  • ARCHIVE — сжимала данные для хранения больших объёмов редко используемой информации.

Версия 5.0 также поддерживала репликацию (один мастер и несколько слейвов), полнотекстовый поиск (только для MyISAM) и механизм кэширования запросов.

Производительность и масштабирование

MySQL 5.0 была оптимизирована для работы на однопроцессорных и многопроцессорных системах. Поддерживалось до 64 процессоров (в зависимости от операционной системы). Максимальный размер таблицы для InnoDB составлял 64 ТБ (при размере страницы 16 КБ), для MyISAM — 256 ТБ. Количество одновременных подключений могло достигать нескольких тысяч, но производительность при большом числе соединений снижалась из-за архитектурных ограничений.

Критика и ограничения

Несмотря на значительные улучшения, MySQL 5.0 подвергалась критике по ряду причин:

  • Ограниченная реализация хранимых процедур: отсутствовала поддержка вложенных транзакций, обработчиков исключений (HANDLER) и динамического SQL в полном объёме.
  • Проблемы с триггерами: триггеры не могли вызывать хранимые процедуры, не поддерживались рекурсивные триггеры и триггеры для нескольких строк.
  • Отсутствие полноценной поддержки стандарта SQL: MySQL 5.0 не поддерживала оконные функции, рекурсивные запросы (CTE) и многие другие возможности SQL:2003.
  • Проблемы с репликацией: репликация была асинхронной и могла приводить к рассинхронизации данных при сбоях.
  • Безопасность: в версии 5.0 были обнаружены уязвимости, связанные с переполнением буфера и SQL-инъекциями, которые исправлялись в последующих обновлениях.

Влияние и наследие

MySQL 5.0 стала важной вехой в истории СУБД, поскольку она продемонстрировала способность MySQL конкурировать с коммерческими продуктами в области поддержки сложных бизнес-логик на уровне базы данных. Она широко использовалась в веб-приложениях, включая такие платформы, как WordPress, Joomla и Drupal. Версия 5.0 оставалась популярной до выхода MySQL 5.1 в 2008 году, которая добавила поддержку секционирования таблиц, событий и плагинов для подсистем хранения.

Поддержка MySQL 5.0 была прекращена компанией Oracle (которая приобрела Sun Microsystems в 2010 году) в январе 2012 года. Однако многие организации продолжали использовать её ещё несколько лет из-за стабильности и совместимости с существующими приложениями.

Источники

  • MySQL 5.0 Reference Manual (Oracle Corporation, 2005–2012)
  • «MySQL 5.0 New Features» by Michael Widenius (MySQL AB, 2005)
  • «Understanding MySQL Internals» by Sasha Pachev (O'Reilly Media, 2007)
  • «MySQL 5.0 Stored Procedures» by Guy Harrison (Apress, 2006)
  • Release notes for MySQL 5.0 (MySQL AB, 2005)
Загружаем BFOmetr…