Введение У чебное пособие по MySQL представляет собой набор четких указаний и пояснений, которые помогут вам быстро освоить основные возможности работы с MySQL. В книге описываются перспективы использования MySQL как с точки зрения конечного пользователя, так и с точки зрения администратора. Во введении мы рассмотрим следующие вопросы. Преимущества MySQL. Почему следует использовать именно MySQL. Различия между MySQL версий 4.0 и 4.1. Возможности, которые планируется добавить в следующих версиях. Для кого предназначена эта книга. Как организована эта книга. Замечания по поводу лицензии на использование MySQL. Преимущества MySQL MySQL является превосходным сервером баз данных. Существует множество причин, которые заставят вас рассмотреть возможность использования MySQL в качестве сервера баз данных. MySQL является быстрой и стабильной системой. Это является основной причиной ее популярности. В феврале 2002 года электронное издание eWeek (www. eweek.com) опубликовало результаты тестирования основных систем управления базами данных, включая Oracle, Microsoft SQL Server, DB2 и MySQL. Результаты тестирования вывели MySQL и Oracle 9 на первое место по производительности. Следует отметить, что тестирование выполнялось для альфа-версии MySQL 4.0, но MySQL 4.1 работает еще быстрее. Система MySQL доступна как в версии бесплатного программного обеспечения, так и в коммерческом исполнении. Для этого используется так называемая “двойная” лицензионная схема. Все программное обеспечение MySQL можно Введение 21 приобрести с общедоступной лицензией (GNU GPL), но в тех случаях, когда требуется коммерческая лицензия, систему можно также купить. MySQL поддерживает большинство возможностей, которые считаются важными сообществом пользователей и разработчиков баз данных, такие как, например, транзакции, блокирование на уровне строк, внешние ключи, подзапросы и полнотекстовый поиск. В версии 5.0 планируется добавить возможность использования сохраненных процедур. Система MySQL хорошо проверена и надежна. Она используется целым рядом очень требовательных заказчиков, таких как Yahoo!, Finance, Slashdot и Бюро переписи США (U.S. Census Bureau). MySQL является прекрасным инструментом изучения баз данных благодаря простоте ее инсталляции и использования, а также исключительно скромным требованиям в отношении дискового пространства и памяти. В общем, MySQL — это превосходный выбор для ваших приложений баз данных. Почему следует использовать именно MySQL Существует очень много систем управления базами данных, с которыми можно сравнивать MySQL, но MySQL предлагает такую комбинацию производительности, цены и возможностей, которую вряд ли смогут предложить другие. Производительность Система MySQL является исключительно быстрой. И Oracle, и Microsoft, и IBM заявляют о том, что их системы управления базами данных являются самыми быстрыми в мире, но, в зависимости от степени вашей доверчивости, это демонстрирует лишь то, что с помощью тестирования можно доказать все, что угодно, оплаченное спонсором, либо то, что при определенных условиях одни продукты ведут себя лучше других. На Web-узле MySQL представлены результаты сравнения MySQL с другими системами управления базами данных. Эти результаты демонстрируют заметное преимущество MySQL по производительности в сравнении с конкурентами. Хотя вы, вероятно, достаточно опытны, чтобы рассматривать результаты тестирований, особенно представленные производителями продуктов, с разумной долей скепсиса, все доступные факты, включая результаты независимых тестов, указывают на то, что MySQL находится среди самых быстрых из доступных систем. Результаты указанных тестов можно найти по следующему адресу: www.mysql.com/information/benchmarks.html 22 Введение Соответствующие программы тестирования вы можете загрузить на свой компьютер, если у вас возникнет желание получить собственные результаты сравнения в вашем собственном реальном окружении. Контрольное тестирование, выполненное журналом eWeek в 2002 году, показало, что в поддержке Web-приложений на базе Java на машинах с четырьмя процессорами и Windows MySQL не уступает по производительности Oracle. Указанные две системы управления базами данных работают быстрее DB2 от IBM, SQL Server от Microsoft и ASE от Sybase. Чуть позже мы поговорим о ценах подробнее, но и в контексте производительности следует отметить, что в данном случае один из лучших продуктов оказывается бесплатным, тогда как другой имеет цену порядка 160 000 долларов (по 40 000 долларов на процессор). Более подробную информацию можно найти по адресу www.eweek.com/article2/ 0,3959,293,00.asp. Для разработчиков MySQL скорость всегда являлась ключевым параметром. Новые возможности добавлялись в пакет MySQL только после того, как их удавалось реализовать без ущерба для производительности. Иногда это означало, что некоторые возможности добавлялись не так быстро, как хотелось бы пользователям, но зато всегда гарантировало быструю работу MySQL. Вероятно, это подтвердят и ваши собственные тесты и опыт работы с MySQL. Цена Цена, по-видимому, является самым простым критерием для сравнения. В большинстве случаев MySQL вообще является бесплатным приложением. Лицензия GPL позволяет использовать это программное обеспечение, изменять исходный код и распространять MySQL среди других пользователей, которые при этом тоже должны подчиняться требованиям лицензии GPL. При определенных условиях, например, если вы хотите включить MySQL в распространяемый вами коммерческий продукт, вам потребуется коммерческая лицензия. Стоимость лицензии для использования указанного продукта на одном сервере составляет (на момент написания книги) 220 или 440 долларов, в зависимости от того, предполагаете вы использовать таблицы InnoDB или нет. Другими словами, для MySQL используется двойная схема лицензирования, когда бесплатное использование продукта регламентируется лицензией GPL, а коммерческое — стандартными лицензиями EULA (End-User License Agreements — лицензионные соглашения с конечным пользователем) и соглашениями OEM (Original Equipment Manufacturer — соглашение с изготовителем оборудования). Общее правило MySQL AB можно сформулировать следующим образом: “если ваш продукт бесплатен, то и наш тоже, если вы его продаете, то и мы продаем”. Главными конкурентами MySQL являются коммерческие продукты, для которых используются сложные ценовые схемы, зависящие от предполагаемого ис- Введение 23 пользования, числа процессоров в каждом сервере и числа пользователей, которые будут к ним подключаться. И Oracle, и SQL Server от Microsoft, и DB2 от IBM, и ASE от Sybase могут стоить от десятков тысяч долларов в обычных условиях до сотен тысяч долларов на серверах с множеством процессоров и многочисленными подключениями клиентов. Иногда MySQL сравнивают с другими открытыми системами управления базами данных, например с PostgreSQL и Firebird. Из всех таких систем только за MySQL стоит единственная компания, владеющая всеми правами интеллектуальной собственности и правом продажи коммерческих лицензий, включая обязательства и компенсации, предусмотренные для организаций с большим числом пользователей. Другой категорией программного обеспечения, в которой иногда проводят сравнения с MySQL, являются недорогие системы управления базами данных, не относящиеся к типу “клиент/сервер” и предназначенные для использования в домашних условиях или в малом бизнесе (например, Microsoft Access и Filemaker Pro). Зачастую такие системы могут предложить пользователю простой и удобный графический интерфейс, но все программы этой категории отличаются недостаточной функциональностью, им не достает стабильности, масштабируемости, а также скорости, необходимой для выполнения важных приложений. Стабильность Разработчики MySQL всегда считали стабильность предметом особой важности. Все версии MySQL, выпускающиеся в бинарном виде — даже альфа-версии, — должны пройти систему тестирования MySQL (MySQL Test Suite). В ходе такого тестирования проверяются функции и другие возможности продукта, равно как и операции, в которых дефекты были обнаружены и исправлены ранее, — таким образом, гарантируется, что выявленные дефекты никогда не будут случайно повторены снова. Разработчики должны считать исправление ошибок задачей с более высоким приоритетом по сравнению с другими задачами разработки. Как правило, разработчики приостанавливают выполнение других задач, пока не будут исправлены все ошибки, относящиеся к их сфере компетенции. Считается правилом, что выходящие версии MySQL должны быть полностью свободны от известных и воспроизводимых ошибок. Естественно, некоторые проблемы бывает невозможно решить без того, чтобы в результате не появилась какая-то другая проблема где-нибудь в другом месте. Это касается разработки версий программного обеспечения, не содержащих кардинальных изменений, способных повлиять на стабильность продукта. Обнаруженные проблемы документируются и исправляются для всех более поздних версий. 24 Введение Наконец, качество гарантируется потребителями и сообществом MySQL. Насчитывая свыше четырех миллионов пользователей во всем мире, работающих в самых разных условиях, это сообщество обеспечивает не имеющие равных возможности поиска дефектов на самых ранних стадиях разработки. Сообщения об ошибках и система их обработки в MySQL являются открытыми, каждый может увидеть то, что сообщают другие, и добавить свои собственные комментарии. Простота использования Еще одной важной особенностью MySQL является простота использования. Для начала работы с MySQL не требуется сложной процедуры конфигурации. MySQL Server начнет работать соответствующим образом сразу. По умолчанию выбираются значения, соответствующие минимальному использованию ресурсов диска и памяти. Для получения оптимальной производительности и для специальных условий (например, для проверки входа в систему), конечно же, потребуется дополнительная настройка. Чтобы помочь выполнить такую настройку, предлагаются соответствующие примеры файлов типовой конфигурации. Возможности Результат сравнения возможностей может зависеть от того, какие из возможностей считать наиболее важными. Некоторые из возможностей, предлагаемых MySQL (например, полнотекстовый поиск, репликация или поддержка больших таблиц), в других приложениях, относящихся к низкой ценовой категории, либо вообще отсутствуют, либо реализованы в далекой от совершенства мере. С другой стороны, в MySQL отсутствуют некоторые возможности (например, сохранение процедур и представления), которые являются стандартными для дорогих систем и доступны в некоторых системах с низкой ценой. Какие-то из этих возможностей планируется добавить в ближайшие версии (например, возможность использования сохраненных процедур), другие же (как, например, представления) потребуют большего ожидания. Некоторые возможности MySQL (например, блокирование на уровне строк) отсутствуют даже в большинстве систем верхнего ценового ряда. Web-страница http://www.mysql.com/information/features.html позволяет провести очень подробное сравнение MySQL с двадцатью конкурирующими системами и выяснить, какие именно возможности поддерживаются в различных предложениях. Приведем очень краткий список возможностей MySQL, не предлагаемых другими конкурентами, а также список возможностей, пока не реализованных в MySQL. MySQL 4.1 предлагает: ACID-совместимые транзакции; кроссплатформенную поддержку; Введение 25 репликации; поддержку огромных таблиц и баз данных; полнотекстовый поиск; поддержку подзапросов; поддержку большинства требований синтаксиса SQL 92. В настоящий момент MySQL не поддерживает: представления; использование сохраненных процедур; триггеры. Различия между версиями 4.0 и 4.1 В течение долгого времени использовалась система MySQL 3.23. MySQL 4.0.13 была выпущена в качестве окончательной версии 4.0 в марте 2003 года. Альфа-вариант версии 4.1 появился в апреле того же года. Если вы использовали версию 3.23, то в версии 4.0 вы отметите следующие важные изменения. Механизм InnoDB включен в стандартный бинарный файл. Это было сделано еще в некоторых из последних вариантов версии 3.23. Механизм InnoDB соответствует стандарту ACID (Automated Classification and Interpretation of Data — автоматическая классификация и интерпретация данных), поддерживает транзакции, внешние ключи и блокировку на уровне строк. Теперь MySQL использует кэш запросов, запоминая их результаты для повторного использования, что значительно повышает производительность системы в отношении типичных запросов. Полнотекстовая индексация и поиск, которые были добавлены в версии 3.23.23, усовершенствованы за счет добавления режима Boolean. Функция MERGE для таблиц поддерживает опции INSERT и AUTO_ INCREMENT. Результирующие множества запроса SELECT можно объединять командой UNION. С помощью одного оператора DELETE можно удалять строки из нескольких таблиц. Усовершенствована система управления правами пользователей. Добавлен ряд привилегий, позволяющих организовать более тщательный контроль доступа пользователей к ресурсам. 26 Введение Можно вносить изменения в конфигурацию сервера, не перезапуская сервер. Новая библиотека libmysqld на языке C позволит встроить серверы MySQL в ваши программы. Возможность репликации, которая стала доступной в версии 3.23.15, была значительно усовершенствована, в основном, путем исправления выявленных ошибок. Например, теперь можно указать подчиненный сервер с помощью команды LOAD DATA FROM MASTER, а не использовать mysqldump или средство типа mysqlsnapshot. Кроме того, было внесено бесчисленное множество других, более мелких изменений и улучшений. В версии 4.1 тоже имеются некоторые усовершенствования. Самое важное изменение — это возможности использования подзапросов и производных таблиц. Добавлена также поддержка Unicode, хранения географических данных OpenGIS и масса других мелких усовершенствований. Возможности, которые планируется добавить в следующих версиях Версия 5.0 в настоящий момент находится в стадии разработки, предшествующей альфа-версии, но уже сейчас вы можете загрузить исходный код и экспериментировать с ним. Главное изменение в версии 5.0 — добавление возможности использования сохраненных процедур, которая на этой стадии уже реализована. Планируются и другие изменения, в частности, поддержка курсоров, индексов RTREE, полномасштабная поддержка VARCHAR и множество других возможностей. Версия 5.1 должна поддерживать (среди множества других возможностей) внешние ключи для всех типов таблиц. Представления должны получить поддержку в одной из версий 5.x. Кому следует прочитать эту книгу Эта книга уникальна, потому что состоит из ряда коротких, лаконичных глав, посвященных конкретной узкой теме и нацеленных на решение определенной задачи. Каждая глава заканчивается контрольными вопросами и упражнениями, позволяющими проверить, насколько хорошо вы усвоили обсуждавшийся материал. Мы стремились создать книгу, являющуюся учебником для умного читателя. Подчеркнем, что эта книга — не справочник. В качестве справочника мы рекомендуем использовать превосходное и доступное в оперативном режиме руководство по MySQL — это как раз тот случай, когда не следует снова изобретать колесо. Введение 27 Наше внимание будет сосредоточено на пяти ключевых моментах: установка и конфигурация MySQL, разработка и создание базы данных в системе MySQL, использование MySQL, администрирование и оптимизация MySQL. Будут описаны основные приемы, которыми необходимо овладеть, чтобы использовать MySQL на профессиональной основе. С помощью этой книги вы можете выяснить, как выполнить основные задачи MySQL для нового проекта, новой работы или курса, не располагая временем, необходимым для освоения книги объемом в тысячу страниц. Наша книга сфокусирует ваше внимание на выполнении конкретных задач и тем самым поможет вам быстрее выполнить свою работу. Как организована эта книга Эта книга разделена на шесть частей. Часть I, “Основы MySQL”, поможет установить и настроить MySQL, здесь же предлагается краткое описание структуры и средств MySQL. Часть II, “Проектирование и создание баз данных MySQL”, проведет через весь процесс проектирования и создания базы данных. Читатели, уже освоившие науку проектирования баз данных, могут пропустить эту часть книги, но если базы данных для вас являются новой темой, мы рекомендуем внимательно изучить предлагаемый материал. Часть III, “Использование MySQL”, объяснит, как организовать и выполнить типичные запросы MySQL. Часть IV, “Типы таблиц MySQL и транзакции”, расскажет, как использовать различные механизмы хранения MySQL, а особое внимание будет уделено механизму InnoDB и возможностям его использования для выполнения транзакций. Часть V, “Администрирование MySQL”, описывает основные задачи, которые должен выполнять администратор базы данных в рамках системы MySQL, в частности, задачи управления правами пользователей, настройки системы, управления базой данных, резервирования и восстановления данных, репликации и обеспечения безопасности базы данных. Часть VI, “Оптимизация MySQL”, поможет получить максимум отдачи от базы данных MySQL путем оптимизации установок сервера, базы данных и запросов в вашей конкретной среде. В конце каждой главы содержатся контрольные вопросы и упражнения, которые помогут вам на практике закрепить знания, полученные в соответствующей главе. 28 Введение Замечания по поводу лицензий MySQL Исходным кодом MySQL и соответствующей документацией владеет компания MySQL AB, управляемая разработчиками и основателями MySQL. Большинство частей исходного кода MySQL доступно на условиях, соответствующих общедоступной лицензии GNU. На практике это означает, что вы можете свободно использовать, копировать, распространять и модифицировать исходный код MySQL. Если вы копируете или распространяете код (или модифицируете, а затем копируете и распространяете код), то должны делать это в соответствии с общедоступной лицензией. Если вы распространяете двоичный код, то должны включить в поставку и исходный код. Полный текст лицензии GNU GPL вы можете прочитать в своем дистрибутиве MySQL, оперативном руководстве по MySQL или на оперативно доступной странице Фонда бесплатного программного обеспечения (Free Software Foundation): http://www.gnu.org/licenses/ Более подробная информация о GPL предлагается по адресу http://www.gnu.org/licenses/gpl-faq.html Если для ваших целей это не подходит — например, если вы хотите модифицировать MySQL и продать измененный двоичный код без доступа к исходному коду, — то должны купить у MySQL AB коммерческую лицензию. Можно также купить коммерческую лицензию MySQL AB в том случае, если вы хотите поддержать разработку MySQL. Важно также отметить, что документация MySQL не предоставляется на условиях общедоступной лицензии GPL, но ее разрешается распечатать для личного использования.