MySQL 5.0. Библиотека программиста
Виктор Гольцман
Эта книга предназначена для всех, кто желает освоить СУБД MySQL. Для ее чтения вам не нужны никакие специальные знания – достаточно быть пользователем Windows. Вы узнаете, как установить и запустить MySQL, как создать собственную базу данных, как работать с данными при помощи команд SQL, как администрировать базу данных и оптимизировать ее работу. Разработчики веб-приложений на языках PHP, Perl и Java найдут в этой книге полезные сведения по использованию базы данных MySQL в соответствующих приложениях. Для всех операций, которые вам предстоит выполнить, приводятся подробные пошаговые инструкции, все основные действия поясняются на примере учебной базы данных.
Виктор Гольцман
MySQL 5.0. Библиотека программиста
Введение
MySQL – это система управления базами данных (СУБД) с открытым кодом. Это высокопроизводительная и масштабируемая СУБД с множеством программных интерфейсов. Она обладает огромными функциональными возможностями и подходит для решения самых разных задач.
Данная книга предназначена для всех, кто желает освоить MySQL. Чтобы начать работу, вам не потребуется никаких специальных знаний – достаточно быть пользователем Windows. Вы узнаете, как установить и запустить MySQL, как построить, администрировать собственную базу данных и оптимизировать ее работу. Вы также узнаете, как работать с данными с помощью команд языка SQL. Разработчики веб-приложений на языках PHP, Perl и Java найдут в этой книге руководство по использованию базы данных MySQL в соответствующих приложениях. В книге приводятся подробные пошаговые инструкции по выполнению всех операций. Кроме того, все основные действия поясняются на примере учебной базы данных, содержащей информацию о клиентах, товарах и заказах торговой компании. Книга состоит из шести глав.
• Глава 1. Знакомство. Данная глава содержит общую информацию о СУБД MySQL, начальные сведения о реляционных базах данных и этапах проектирования базы данных. Кроме того, в главе подробно описываются установка, настройка и запуск сервера MySQL, а также подключение к нему клиентских приложений.
• Глава 2. Управление базой данных с помощью SQL. Глава посвящена SQL-командам, обеспечивающим работу с таблицами и их данными. Изучив эту главу, вы сможете управлять структурой таблиц, добавлять, редактировать и получать данные.
• Глава 3. Операторы и функции языка SQL. Данная глава дополняет предыдущую: в ней представлены сведения об операторах и функциях, позволяющих создавать условия отбора данных, обрабатывать результаты выполнения вложенных запросов, агрегировать содержащуюся в таблицах информацию и вычислять значения различных выражений.
• Глава 4. Доступ к базе данных из веб-приложений. Глава содержит три раздела, в которых рассматриваются интерфейсы MySQL с языками программирования PHP, Perl и Java. В каждом из разделов описываются функции подключения к базе данных, ввод и извлечение данных, обработка ошибок взаимодействия с БД, а также примеры веб-приложений, использующих эти функции.
• Глава 5. Администрирование и безопасность. Глава описывает систему привилегий доступа пользователей MySQL к различным операциям с данными, а также процедуру резервного копирования и восстановления данных в случае сбоя.
• Глава 6. Оптимизация. В заключительной главе приводятся рекомендации по повышению производительности сервера MySQL.
Прочитав эту книгу, вы станете настоящим профессионалом и ценным сотрудником для коммерческих фирм, занятых разработкой веб-приложений различного назначения.
От главы коллектива авторов
Высказать замечания и пожелания, задать вопросы по этой книге вы можете по адресу AlexanderZhadaev@sigmaplus.mcdir.ru или посетив нашу домашнюю страничку www.sigmaplus.mcdir.ru (http://www.sigmaplus.mcdir.ru/) (там вы найдете также дополнительные материалы по книге, сможете принять участие в форуме или пообщаться в чате).
Александр Жадаев
От издательства
Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты gurski@minsk.piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На сайте издательства http://www.piter.com (http://www.piter.com/) вы найдете подробную информацию о наших книгах.
Глава 1
Знакомство
Эта глава содержит сведения о построении базы данных и о подготовительных этапах работы: проектировании БД, установке и запуске MySQL. Следующий раздел даст вам общее представление об этой программе.
1.1. Что такое MySQL
MySQL – это свободно распространяемая СУБД, разработанная компанией MySQL AB (www.mysql.com (http://www.mysql.com/)). MySQL имеет клиент-серверную архитектуру: к серверу MySQL могут обращаться различные клиентские приложения, в том числе с удаленных компьютеров. Рассмотрим важнейшие особенности MySQL, благодаря которым эта программа приобрела популярность.
• MySQL – это СУБД с открытым кодом. Любой желающий может бесплатно скачать программу на сайте разработчика (http://dev.mysql.com/downloads/ (http://dev.mysql.com/downloads/)) и при необходимости доработать ее. Существует множество приложений MySQL, созданных и свободно распространяемых сторонними разработчиками. Однако для применения MySQL в коммерческом приложении необходимо приобрести коммерческую лицензированную версию программы у компании MySQL AB.
• MySQL – кроссплатформенная система. Ее можно использовать практически во всех современных операционных системах, в том числе Windows, Linux, Mac OS, Solaris, HP-UX и др. В этой книге мы рассмотрим работу с MySQL только в ОС Windows.
• MySQL имеет множество программных интерфейсов (API), благодаря которым к базе данных MySQL могут подключаться приложения, созданные с помощью C/C++, Eiffel, Java, Perl, PHP, Python, Tcl, ODBC, NET и Visual Studio. В главе 4 вы узнаете, как обращаться к базе данных MySQL из PHP-, Perl– и Java-приложений.
• MySQL имеет отличные технические характеристики: многопоточность, многопользовательский доступ, быстродействие, масштабируемость (компания-разработчик приводит пример MySQL-сервера, который работает с 60 тыс. таблиц, содержащими приблизительно 5 млрд строк).
• MySQL имеет развитую систему обеспечения безопасности и разграничения доступа на основе системы привилегий (гл. 5).
MySQL представляет собой реляционную СУБД, то есть систему управления реляционными базами данных. Поэтому для построения базы данных в MySQL нам потребуются базовые понятия теории реляционных баз данных. Этим понятиям посвящается следующий раздел.
1.2. Основные сведения о реляционных базах данных
Из этого раздела вы узнаете, как устроена реляционная база данных. Вначале мы рассмотрим таблицы, затем ключевые столбцы, связи между таблицами и, наконец, целостность данных в базе.
Таблицы
Реляционная база данных существует в виде таблиц, имеющих свои имена. На пересечении каждого столбца и каждой строки располагается одно значение.
Рассмотрим таблицу, содержащую сведения о клиентах компании (табл. 1.1).
Таблица 1.1. Customers (Клиенты)
Строки таблицы могут храниться в произвольной последовательности и не должны повторяться.
Каждый столбец таблицы имеет имя и тип данных, которому соответствуют все значения в столбце. Так, в нашем примере столбцы с именами id и rating – числовые, а с именами name, phone и address – символьные.
По существу, таблица реляционной базы данных представляет собой набор информации об однотипных объектах. При этом каждая строка содержит сведения об одном объекте, а каждый столбец – значения некоторого атрибута этих объектов. Например, строка с идентификационным номером 533 содержит информацию об объекте, у которого атрибут name (имя) имеет значение ООО «Кускус», атрибут phone (телефон) – значение 313-48-48 и т. д.
Далее мы рассмотрим специальные столбцы таблицы – первичный и внешний ключи.
Первичный ключ
Строки таблицы неупорядочены и не имеют номеров, поэтому различить их можно только по содержащимся значениям. В связи с этим возникает необходимость рассмотреть понятие первичного ключа (primary key).
Первичный ключ – это минимальный набор столбцов, совокупность значений которых однозначно определяет строку. Это означает, что в таблице не должно быть строк, у которых значения во всех столбцах первичного ключа совпадают, при этом ни один столбец нельзя исключить из первичного ключа, иначе это условие нарушится.
На практике первичным ключом служит специальный столбец, значения которого автоматически задает СУБД. Например, в таблице Customers (Клиенты) (см. табл 1.1) это столбец id (идентификатор). Использовать такой искусственный первичный ключ значительно проще, чем естественный (основанный на атрибутах объекта). Например, в таблице Customers столбец name (имя) не может быть первичным ключом, так как имена клиентов могут совпадать; а первичный ключ из столбцов name (имя) и phone (телефон) был бы слишком громоздким. Дополнительными преимуществами искусственного ключа являются гарантированная уникальность значений (ее обеспечивает СУБД), постоянство значений (может меняться значение атрибута, но не значение искусственного ключа), а также числовой тип данных (поиск по числовым значениям выполняется намного быстрее, чем по символьным).
Еще одна функция первичного ключа – организация связей между таблицами.
Связи между таблицами. Внешний ключ
Реляционная база данных – это не просто набор таблиц. Объединить разрозненные фрагменты информации в единую структуру данных позволяют связи между таблицами, посредством которых строка одной таблицы сопоставляется строке (строкам) другой таблицы. Благодаря связям можно извлекать информацию одновременно из нескольких таблиц (например, выводить с помощью одного запроса и сведения о клиенте, и сведения о его заказах), избегать дублирования информации (не требуется в каждом заказе хранить адрес клиента), поддерживать полноту информации (не хранить сведения о заказанном товаре, если в базе данных отсутствует его описание) и многое другое.
Рассмотрим на примере, что такое связь между таблицами. Допустим, у нас есть таблицы A и B, и мы хотим их связать. Для этого в каждую строку таблицы A мы должны поместить некую информацию, позволяющую идентифицировать связанную с ней строку таблицы B. Эта информация называется ссылкой, а поля таблицы A, содержащие эту ссылку, – внешними ключами. Наверное, вы уже сами догадались, что в качестве ссылки используется первичный ключ таблицы B, поскольку именно его значения позволят однозначно идентифицировать нужную строку таблицы B. После того как мы во все строки таблицы A поместим ссылки на строки таблицы B, эти таблицы будут связаны. При этом таблица A будет называться дочерней, а таблица B – родительской.