Книги, научные публикации Pages:     | 1 | 2 | 3 | 4 | 5 |   ...   | 11 | -- [ Страница 1 ] --

мтт.

MySQL Предисловие Майкла "Монти" Видениуса, координатора проекта MySQL Поль Дюбуа ББК 32.973.26-018.2Я75 Д95 УДК 681.3.07 Издательский дом "Вильяме" Перевод с английского Н.В. Воронина и К.А. Мартусенко Под редакцией Н.В. Воронина По общим вопросам обращайтесь в Издательский дом "Вильяме" по адресу: info@williamspublishing.com, Дюбуа, Поль. Д95 MySQL : Пер. с англ. : Уч. пос. Ч М. : Издательский дом "Вильяме", 2001. Ч 816 с. : ил. Ч Парал. тит. англ. ISBN 5-8459-0158-8 (рус.) В книге описана одна из самых популярных реляционных систем управления базами данных MySQL. Вместо простого обзора возможностей MySQL, автор показывает, как можно максимально эффективно использовать эту СУБД. На примере двух тестовых баз данных он приводит рецепты решения проблем, с которыми вы обязательно столкнетесь при практическом использовании MySQL. Вы научитесь интегрировать MySQL с программными средствами, разработанными сторонними компаниями, такими как компиляторы языков РНР и Perl, которые позволяют с помощью запросов к базе данных создавать динамические Web-страницы. Кроме того, здесь приведен обширный справочник по типам столбцов, операторам, функциям, синтаксическим конструкциям языка SQL, интерфейсам С API, Perl DBI и PHP API. В книге предоставлена уникальная информация, которую вряд ли можно получить где-нибудь еще. Книга рассчитана на пользователей и разработчиков систем клиент/сервер на основе MySQL. ББК 32.973.26-018.2Я75 Все названия программных продуктов являются зарегистрированными торговыми марками соответствующих фирм. Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, если на это нет письменного разрешения издательства New Riders Publishing. Authorized translation from the English language edition published by New Riders Publishing, Copyright й 2000 All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Russian language edition published by Williams Publishing House according to the Agreement with R&I Enterprises International, Copyright й 2001 ISBN 5-8459-0158-8 (рус.) ISBN 0-7357-0921-1 (англ.) О Издательский дом "Вильяме", 2001 й New Riders Publishing, Оглавление ЧАСТЬ I. ИСПОЛЬЗОВАНИЕ СУБД MYSQL Глава 1. Знакомство с СУБД MySQL и SQL Глава 2. Работа с данными в MySQL Глава 3. Синтаксис и использование языка SQL Глава 4. Оптимизация запросов ЧАСТЬ И. ПРОГРАММНЫЕ ИНТЕРФЕЙСЫ СУБД MYSQL Глава 5. Введение в программирование в СУБД MySQL Глава 6. Программный интерфейс MySQL С API Глава 7. Программный интерфейс Perl API Глава 8. Интерфейс API для языка написания сценариев РНР ЧАСТЬ III. АДМИНИСТРИРОВАНИЕ MYSQL Глава 9. Введение в администрирование MySQL Глава 10. Каталог данных MySQL Глава 11. Общее администрирование MySQL " Глава 12. Безопасность, Глава 13. Поддержка и восстановление баз данных ЧАСТЬ IV. ПРИЛОЖЕНИЯ Приложение А. Получение и инсталляция программного обеспечения Приложение Б. Типы столбцов Приложение В. Операторы и функции Приложение Г. Синтаксис SQL Приложение Д. Программы MySQL Приложение Е. Программный интерфейс приложений С Приложение Ж. Программный интерфейс DBI языка написания сценариев Perl Приложение 3. Программный интерфейс языка РНР Приложение И. Утилиты независимых разработчиков Приложение К. Провайдеры услуг Internet Предметный указатель 37 38 119 185 227 251 252 275 333 412 453 454 460 479 518 540 555 556 576 586 631 668 707 741 761 784 787 Содержание Об авторе О рецензентах Предисловие Благодарности Ждем ваших отзывов! Введение Все-таки, почему MySQL? Если вы уже работаете с другой СУБД Инструментарий, поставляемый с MySQL Можно ли получить MySQL бесплатно? Для кого предназначена эта книга Как написана эта книга Часть I. Использование СУБД MySQL Часть II. Программные интерфейсы СУБД MySQL Часть III. Администрирование MySQL Часть IV. Приложения Как читать эту книгу Версии программного обеспечения, которые упоминаются в этой книге Соглашения, используемые в этой книге Дополнительные источники ЧАСТЬ I. ИСПОЛЬЗОВАНИЕ СУБД MYSQL Глава 1. Знакомство с СУБД MySQL и SQL Назначение СУБД MySQL Пример базы данных "Историческая Лига" Проект "Учет успеваемости" ' Каким образом пример базы данных можно использовать в конкретном случае Основная терминология баз данных Структурная терминология Терминология языка запросов SQL Терминология архитектуры СУБД MySQL Учебный курс по СУБД MySQL 17 17 19 20 21 22 24 26 27 28 30 30 30 31 31 32 32 34 34 35 37 38 39 43 44 47 47 48 48 51 51 Содержание Предварительные требования Пример тестовой базы данных Установка и завершение связи с сервером Ввод запросов Создание базы данных Создание таблиц Дополнение таблиц Выборка информации Удаление и модификация существующих записей Модификация структуры таблиц Как работать с mysql Упрощение процесса подключения Упрощение процесса создания запросов Что дальше?

53 55 55 57 59 61 77 80 107 109 110 110 113 Глава 2. Работа с данными в MySQL 119 Типы данных СУБД MySQL 121 Цифровые данные 121 Строковые (символьные) данные 121 Календарные данные 122 Пустое значение (Null) 123 Типы столбцов СУБД MySQL 123 Типы столбцов 124 Цифровые типы столбцов 127 Строковые типы столбцов 139 Календарные типы столбцов '" 150 Выбор типа столбца 157 Данные какого типа будут храниться в столбце? 160 Каков диапазон значений? 163 Как повысить производительность и эффективность 164 Каким образом сравниваются значения? 167 Как учесть внутреннюю зависимость при выборе типа столбца 168 Вычисление выражений и преобразование типов 169 Правила написания выражений 170 Глава 3. Синтаксис и использование языка SQL СУБД MySQL: преимущества и недостатки Правила присвоения имен в СУБД MySQL Ссылка на элементы баз данных Чувствительность к регистру в операторах SQL Создание, удаление и выборка баз данных Оператор CREATE DATABASE Оператор DROP DATABASE Оператор USE Создание, удаление, индексирование и изменение структуры таблицы Оператор CREATE TABLE Содержание 185 186 187 188 189 190 190 191 191 192 192 Оператор DROP TABLE Создание и удаление индексов Оператор ALTER TABLE Получение информации о базах данных и таблицах Выборка записей Тривиальное объединение Полное объединение Левое объединение Комментарии Разные решения Преобразование вложенных выборок в объединения Проверка отсутствующих значений в таблице Выполнение операции UNION Добавление столбца с непрерывной последовательностью значений Упорядочение или переупорядочение существующих столбцов Сортировка в произвольном порядке Таблица со счетчиком Проверка таблицы на существование Возможности, которые не поддерживает СУБД MySQL Глава 4. Оптимизация запросов Индексирование Преимущества индексирования Недостатки индексирования Выбор индекса Оптимизатор MySQL Как работает оптимизатрр Подавление оптимизации Выбор типа столбцов и эффективность запросов Эффективная загрузка данных Проблемы планирования и блокировки Оптимизация для администраторов Параметры сервера Проблема аппаратной платформы Глава 5. Введение в программирование в СУБД MySQL Интерфейсы API для СУБД MySQL Интерфейс API для языка С Интерфейс Perl DBI API Интерфейс PHP API Выбор API-интерфейса Среда выполнения Производительность 197 198 202 205 206 208 208 210 211 212 212 214 216 217 217 218 218 219 220 227 228 228 231 232 234 235 238 240 243 246 249 249 250 252 258 259 260 263 264 265 ЧАСТЬ II. ПРОГРАММНЫЕ ИНТЕРФЕЙСЫ СУБД MYSQL Содержание Глава 6. Программный интерфейс MySQL С API Общая процедура создания клиентских программ Основные требования к системе Компилирование и редактирование связей клиентской программы Client 1 Ч подключение к серверу Client2 Ч добавление диагностики ошибок Clients Чмодульный стиль программирования Client4 Ч получение параметров соединения во время выполнения Доступ к содержимому конфигурационного файла Синтаксический анализ аргументов командной строки Обработка запросов Обработка запросов, не возвращающих результатов Х Обработка запросов, возвращающих результаты Обработка общих запросов Альтернативные методы обработки запросов Сравнение возможностей mysql_store_result() и mysql_use_result() Метаданные результирующего запроса Clients Ч программа интерактивного ввода запросов Разное Выполнение вычислений на основе данных, полученных в результирующем наборе ' Кодирование проблемных данных в запросах Обработка изображений Получение информации из таблицы Наиболее часто встречающиеся ошибки' при программировании клиентских программ Глава 7. Программный интерфейс Perl API Свойства сценариев языка Perl Основы интерфейса базы данных Perl Типы данных интерфейса DBI Простой DBI-сценарий Обработка ошибок Обработка запросов, не возвращающих результирующего набора данных Обработка запросов, возвращающих результирующий набор данных Подготовка интерфейса к работе Генерация каталога общества "Историческая Лига" Рассылка напоминаний об истечении срока членства Редактирование записей о членах "Исторической Лиги" Подбор членов "Исторической Лиги" по общности интересов Размещение каталога "Исторической Лиги" на Web-узле Содержание 275 277 277 278 279 281 285 292 293 296 305 306 307 311 313 315 317 322 323 324 326 328 329 329 333 334 335 335 336 341 345 346 371 372 379 384 389 390 Работа с интерфейсом DBI в Web-приложениях Настройка сервера Apache для работы с CGI-сценариями Краткое знакомство с модулем CGI.pm Подключение к серверу MySQL Server из Web-сценария Броузер базы данных samp_db Броузер проекта "Учета успеваемости" Подбор членов "Исторической Лиги" по общности научных интересов 393 394 396 401 403 407 Глава 8. Интерфейс API для языка написания сценариев РНР 412 Характеристики сценария, написанного на языке РНР 413 Основы языка РНР 413 Работа с функциями и включаемыми файлами 420 Web-страница с простейшим запросом 425 Обработка результатов запроса 427 Обработка ошибок 432 Проблема кавычек 433 Работа с РНР 434 Ввод оценок учащихся 435 Викторина "Президенты США" 443 Интерактивное редактирование данных о членах, "Исторической Лиги" 446 ЧАСТЬ III. АДМИНИСТРИРОВАНИЕ MYSQL Глава 9. Введение в администрирование MySQL Обзор задач администрирования Общее администрирование Безопасность Отладка и поддержка баз данных Глава 10. Каталог данных MySQL Размещение каталога данных Структура каталога данных Как обеспечивается доступ к данным сервера MySQL Представление баз данных Представление таблиц баз данных Ограничения операционной системы на имена баз данных и таблиц Влияние структуры каталога данных на производительность системы Файлы состояния MySQL Перемещение содержимого каталога данных Методы перемещения Определение эффекта перемещения Перемещение каталога данных Перемещение баз данных 10 453 454 455 456 458 459 460 461 463 463 465 466 467 468 470 473 474 475 476 Содержание Перемещение таблиц баз данных Перемещение файлов состояния лава 11. Общее администрирование MySQL Защита новой инсталляции MySQL Настройка процедур запуска и завершения работы сервера MySQL Запуск сервера MySQL непривилегированным пользователем Методы запуска сервера Определение опций запуска Завершение работы сервера Когда нельзя подключиться к серверу Управление пользовательскими учетными записями Создание новых пользователей и предоставление привилегий Отмена привилегий и удаление пользователей Ведение файлов журналов Резервирование и копирование баз данных Резервирование и копирование баз данных с помощью программы mysqldump Использование методов прямого копирования Репликация баз данных Восстановление данных из архивов Восстановление базы данных Восстановление отдельных таблиц Настройка сервера Запуск нескольких серверов Инсталляция и настройка нескольких серверов Процедуры запуска нескольких серверов Обновление MySQL Глава 12. Безопасность Внутренняя безопасность: зашита доступа к каталогу данных Внешняя безопасность: защита сетевого доступа Структура и содержимое таблиц разрешений MySQL Как сервер управляет доступом клиентов Проверка запроса Порядок сравнения столбцов Как минимизировать риск при работе с таблицами разрешений Установка пользователей без помощи оператора GRANT Глава 13. Поддержка и восстановление баз данных Проверка и восстановление таблиц баз данных Синтаксис утилит myisamchk и isamchk Проверка таблиц Восстановление таблиц 477 478 479 480 482 482 485 486 487 488 490 491 497 499 503 505 508 509 509 510 511 511 514 515 515 516 518 519 522 523 528 531 534 540 541 542 543 Содержание Как исключить возможность одновременного доступа к таблицам сервера MySQL и утилит Ускорение работы утилит myisamchk и isamchk Планирование превентивной поддержки Периодическая проверка таблиц с помощью программы стоп Проверка таблиц во время загрузки системы ЧАСТЬ IV. ПРИЛОЖЕНИЯ Приложение А. Получение и инсталляция программного обеспечения Выбор компонентов для инсталляции Получение программного обеспечения Выбор инсталлируемой версии Инсталляция MySQL в системе UNIX Еще об инсталляции MySQL Создание учетной записи для пользователя MySQL Получение и инсталляция дистрибуции MySQL Инициализация каталога данных и таблиц разрешений Запуск сервера Инсталляция поддержки Perl DBI Инсталляция РНР и Apache Инсталляция MySQL в Windows Инсталляция дистрибуции клиентской программы или клиент/сервера Инсталляция MyODBC Инсталляция поддержки Perl DBI Инсталляция РНР и Apache Получение и инсталляция дистрибуции базы данных samp_db Приложение Б. Типы столбцов Числовые типы Строковые типы Типы даты и времени Приложение В. Операторы и функции Операторы Приоритет операторов Операторы группировки Арифметические операторы Операторы сравнения Битовые операторы Логические операторы Операторы преобразования Операторы сравнения с образцом Функции Функции сравнения 546 549 550 552 553 555 556 557 558 558 560 561 561 562 566 567 567 569 571 572 573 574 575 575 576 577 580 583 586 588 588 588 589 590 594 595 596 596 600 Содержание Числовые функции Строковые функции Функции даты и времени Суммирующие функции Другие функции Приложение Г. Синтаксис SQL Операторы SQL ALTER TABLE CREATE DATABASE CREATE FUNCTION CREATE INDEX CREATE TABLE DELETE DESCRIBE DROP DATABASE DROP FUNCTION DROP INDEX DROP TABLE EXPLAIN FLUSH Оператор GRANT INSERT KILL LOAD DATA LOCK TABLES OPTIMIZE TABLE REPLACE REVOKE SELECT SET SHOW UNLOCK TABLES UPDATE USE Синтаксис комментариев 602 607 615 624 625 631 632 632 634 634 635 635 639 640 640 641 641 641 641 642 642 645 646 647 651 651 652 652 653 656 659 664 665 665 665 668 669 670 672 675 676 677 678 678 Х " r' Приложение Д. Программы MySQL Определение программных опций Стандартные опции программы MySQL Конфигурационные файлы Переменные среды Утилиты isamchk и myisamchk Использование Стандартные опции, поддерживаемые утилитами isamchk и myisanchk Общие опции утилит isamchk и myisamchk Содержание Специальные опции утилиты myisamchk Переменные утилит isamchk и myisamchk Утилиты myisampack и pack_isam Использование Стандартные опции, поддерживаемые утилитами myisampack и pack_isam Общие опции утилит myisampack и pack_isam Специальные опции packjsam Утилита mysql Использование Стандартные опции, поддерживаемые программой mysql Специальные опции mysql Переменные mysql Команды mysql Сценарий mysql.server Использование Сценарий mysqlaccess Использование Стандартные опции, поддерживаемые сценарием mysqlaccess Специальные опции mysqlaccess Программа mysqladmin Использование Стандартные опции, поддерживаемые утилитой mysqladmin, Специальные опции mysqadmin Команды mysqladmin Программа mysqlbug Использование Программа mysqld Использование Стандартные опции, поддерживаемые программой mysqld Специальные опции mysqld Переменные mysqld Программа mysqldump Использование Стандартные опции, поддерживаемые программой mysqldump Специальные опции mysqldump Опции форматирования данных Переменные mysqldump Программа mysqlimport Использование Стандартные опции, поддерживаемые утилитой mysqlimport Специальные опции mysqlimport Опции форматирования данных Программа mysqlshow Использование Стандартные опции, поддерживаемые программой mysqlshow 680 681 681 682 682 682 683 683 685 685 685 687 687 688 688 689 689 689 689 690 690 690 690 691 693 693 693 694 694 694 698 700 700 701 701 702 703 703 703 704 704 704 705 705 Содержание Специальные опции mysqlshow Программа safe_mysqld Использование Приложение Е. Программный интерфейс приложений С Компилирование и редактирование связей Типы данных программного интерфейса приложений С Скалярные типы данных Нескалярные типы данных Макросы доступа Функции программного интерфейса приложений С Функции управления соединением Функции состояния и диагностики ошибок Функции создания и выполнения запросов Функции обработки результирующих наборов Информационные функции Административные функции Функции отладки Исключенные функции Приложение Ж. Программный интерфейс DBI языка написания сценариев Perl Написание сценариев Методы интерфейса DBI Методы класса DBI Методы дескрипторов баз данных ''" Методы дескрипторов операторов Методы общих дескрипторов Специальные административные методы MySQL Функции утилит интерфейса DBI Атрибуты интерфейса DBI Общие атрибуты дескрипторов Динамические атрибуты Специальные атрибуты дескрипторов баз данных MySQL Атрибуты дескрипторов операторов Специальные атрибуты дескрипторов операторов MySQL Переменные среды интерфейса DBI Приложение 3. Программный интерфейс языка РНР Написание сценариев РНР Функции Программы управления соединением Программы состояния и диагностики ошибок Программы построения и выполнения запросов Программы обработки результирующих наборов Программы баз данных Содержание 706 706 706 707 708 708 709 709 714 714 715 721 721 724 734 736 737 737 741 742 742 744 747 749 752 753 754 755 755 756 756 757 758 760 761 762 763 764 765 767 770 782 Приложение И. Утилиты независимых разработчиков Приложение К. Провайдеры услуг Internet Выбор провайдера Пропускная способность Службы Оценка провайдера Аспекты работы с MySQL Предметный указатель 784 787 789 789 790 790 797 Содержание Об авторе Пол Дюбуа (Paul DuBois) последние 15 лет работал администратором сети и баз данных в Висконсинском университете (Wisconsin University, Madison) Он автор книг Software Portability With imake и Using csh & tcsh и соавтор справочного руководства по СУБД MySQL.

О рецензентах Дэвид Оксмарк (David Axmark) уже более 15 лет работает в должности консультанта по программному обеспечению В числе проектов, в которых он принимал участие, Ч система исследования рынка (CommonLISP+CLOS+MySQLs-ISAM), бизнес-графика (в ЗУПВ 32 Кбайт) и система формирования заказов для энергетической компании. Его перу принадлежат многие страницы программного кода на ассемблере для процессоров 6502 и Z80, языках программирования BASIC, С, CommonLisp, (Bourne)-Shell и Perl. Его увлечение СУБД MySQL началось несколько лет назад, еще до появления первой общедоступной версии. Дэвид живет в Упсале (Швеция) вместе со своими растениями и компьютерами. Виджей Чогул (Vijay Chaugule) работает старшим системным администратором в Сан-Хосе (Калифорния) и поддерживает работу большой UNIX-сети. Он имеет восьмилетний опыт работы с сетями и системами, с коммерческими и GNU-средствами. Его коньком является создание сценариев на языке Perl, компиляция и инсталляция программного обеспечения GNU. Сейчас он использует СУБД MySQL при создании проекта на узле induscrafts.com. Чэд Кэннингэм (Chad Cunningham) Ч разработчик систем на математическом факультете Университета штата Огайо. Здесь он трудится над переводом учебных инструкций из традиционной формы в форму Webприложений. Билл Джерард (Bill Gerrard) Ч вице-президент по технологическим вопросам компании Daze Networks, Inc. в Хантингтон Бич (Калифорния). Компания Daze Networks, Inc. специализируется на Internet-услугах, включая виртуальные Web-серверы на Web-узле DigitalDaze.com, позволяющие получить полное управление вашим сервером СУБД MySQL, и на узле DNSCentral.com, позволяющем регистрировать доменное имя, размещение и поддержку Web-разработок, электронной почты с помощью СУБД MySQL как информационной базы. Джиджо Джордж Джон (Jijo George John) возглавляет отдел разработки программных систем, входящий в состав группы химического анализа компании Hewlett Packard. Он имеет богатый опыт разработки программных систем и прикладного программного обеспечения для химических приборов, хорошо знаком как с интерфейсом "прибор-устройство", так и с различными приложениями, работающими с базами данных. Сейчас он использует СУБД MySQL в процессе выполнения проекта Web-узла induscrafts.com. Фрэд Рид (Fred Read) на протяжении 14 лет возглавляет собственную консалтинговую компанию ServaLan Systems Limited. Его фирма специализируется на проектировании Unix-систем в области телекоммуникаций, баз данных, финансовых приложений и Internet-приложений. В настоящее время ведется разработка телекоммуникационной коммутирующей системы. Последние три года он является Internet-провайдером (PremierISP) и ведет свой рекламный бизнес в Internet (PremierAds). Он уже 9 лет женат на Хелен и воспитывает троих детей (двух девочек и мальчика). Проживает в Англии. Доктор Эгон Шмидт (Dr. Egon Schmid) работает в компании Six Offene Systeme в Лайнфелден-Эхтердинген (Германия) в отделе разработки программных систем. Там создаются отличные Web-решения на основе баз данных. Он также является членом группы документирования языка РНР. Он соавтор первой книги, посвященной РНР на немецком языке. Яни Толонен (Jani Tolonen) Ч разработчик программного обеспечения с применением возможностей СУБД MySQL. Сейчас он учится в Хельсинкском Технологическом университете (Helsinki University of Technology), где фокусирует свои интересы на технологии и программировании во многих областях. Яни учился у Михаэля ("Монти") Видениуса, создателя СУБД MySQL, и глубоко предан делу его развития. Яни и Монти стали друзьями совершенно случайно. Они жили по соседству на протяжении десяти лет, Яни начал работу с СУБД MySQL немного позже, чем Монти начал разработку СУБД MySQL, в 1995 году. Михаэль Видениус ("Монти") Ч финн, разговаривающий на шведском языке. Работает с базами данных с 1978 года. В 1981 году был сначала принят на работу, а потом стал и совладельцем компании ТсХ. Написал большую часть СУБД UNIREG ("предшественницы" СУБД MySQL) и большую часть MySQL-сервера. В Хельсинкском Технологическом университете изучал физику. Работал в основном с языками программирования Basic, Assembler, С, LISP, Perl, SQL, C++ (именно в порядке очередности их освоения), но всегда, когда у него есть время, предпочитает работать с новыми языками. Он женат и имеет двоих детей, двух черепах, одну собаку и двух змей. Сейчас большую часть своего времени он тратит на разборку почты. Кроме того, издательство New Riders хотело бы отблагодарить за неоценимый вклад Томаса Карлссона (Tomas Karlsson), Калина МакКинона (Colin McKinnon), Сашу Пачева (Sasha Pachev), Эрика Сэвэджа (Eric Savage), Дерика Сидовэя (Derick H. Siddoway) и Боба Борти (Bob Worthy).

Предисловие Когда мне предложили рецензировать книгу Пола, я даже не предполагал, что мне еще придется писать и предисловие. Я всегда придерживался мнения, что программисту нельзя писать книги, даже если это книги для программистов. Может я и имею малую толику таланта писать программный код, который потом работает, но, к счастью, есть такие люди, как Пол, которые могут объяснять доступным языком вещи, которые многие пользователи просто не понимают. Мы работали над тем, как сделать MySQL еще эффективнее и быстрее, но у MySQL есть такие возможности, которые можно изучить только на практике. Более года Пол работал над руководством по MySQL, изучая принципы работы СУБД MySQL. В этой книге он делится своим опытом и знаниями с вами. (При желании вы тоже можете подключиться к работе по созданию интерактивного справочного руководства по СУБД MySQL, даже если в данный момент вы не совсем понимаете принципы работы СУБД MySQL.) Руководство по MySQL всегда рассматривалось в ТсХ как технический справочник по MySQL. Нам всегда не доставало руководства пользователя, в котором бы излагались технические концепции в более легкодоступной форме. Эта книга отлично восполняет этот пробел! Одной из самых важнейших задач СУБД MySQL является максимально возможная совместимость со старыми версиями. Поэтому есть уверенность, что, невзирая на очень высокие темпы развития MySQL, большая часть концепций, изложенных в этой книге, будет актуальна достаточно длительный период времени. Не желая злоупотреблять вашим вниманием, я все же хотел бы поблагодарить свою жену Кэрол за ее невероятное долготерпение на протяжении всех трех лет моей работы над проектом MySQL;

моих детей Макса и Ми за понимание того факта, что даже если их папа есть дома, то фактически он отсутствует. Также хочу поблагодарить Дэвида за его бесценный совет написать о MySQL и Аллана Ларсона (Allan Larson) за предоставленную мне возможность это сделать. Я всегда мог рассчитывать на помощь и поддержку со стороны действующей команды MySQL: Яни Толонена, Синиши Миливоевича (Sinisa Milivojevic), Анти Халонена (Antti Halonen) и Тону Самуэля (Топи Samuel). Наконец, я бы хотел поблагодарить тех людей, которые работали над написанием программного интерфейса и клиентских программ, выпускали дополнения и прекрасные отчеты об ошибках, которые помогли нам создать СУБД MySQL в том виде, в котором она есть сегодня. Михаэль Видениус Гельсингфорс (Helsingfors), 1999 г.

Благодарности Книга очень выиграла от комментариев, советов и критических замечаний, полученных от рецензентов Дэвида Оксмарка, Виджея Чогула, Чэда Кэннингэма, Билла Джерарда, Джиджо Джорджа Джона, Фрэда Рида, Эгона Шмидта и Яни Толонена. Особую благодарность хочется выразить Михаэлю Видениусу, основному разработчику СУБД MySQL, который не только принял живое участие в рецензировании этого манускрипта, но и без промедления отвечал на все мои вопросы, которые я задавал в процессе работы над книгой. Хотелось бы также поблагодарить Томаса Карлссона, Калина МакКинона, Сашу Пачееа, Эрика Сэвэджа, Дерика Сидовэя и Боба Ворти. Благодаря всем им книга приобрела свой "окончательный" вид. Хочется поблагодарить и весь штат сотрудников издательства New Riders, которому мы обязаны за саму идею этой книги, а потом и за чудесное превращение моих каракулей в законченный труд, который вы сейчас держите в своих руках. Благодарю Лори Петрицки (Laurie Petrycki), который был исполнительным редактором. Кэти Педам (Katie Purdum), ведущего редактора, направлявшую всю мою работу и принявшую бой, когда я не вписывался в сроки. Лию Вильяме (Leah Williams), взявшую на себя двойную обязанность редактора, отвечающего за проект, и выпускающего редактора за то, что ей приходилось допоздна оставаться на работе особенно на завершающей стадии проекта. Шерил Ленсер (Cheryl Lenser) и Тима Райта (Tim Wright), разработавших предметный указатель. Джона Рама (John Rahm), выполнявшего обязанность редактора проекта. Дебру Нил (Debra Neel), вычитавшую рукопись, Джину Рексрод (Gina Rexrode) и Вила Круза (Wil Cruz), наборщиков, придавшим книге окончательные формы. Еще раз большое спасибо. И больше всего хочется выразить мою признательность моей жене Карен (Karen) за то, что освободила меня от всякой другой работы. За ее понимание моих частых исчезновений в "писательскую зону" и терпение. Ее поддержка облегчила мою задачу, и я с удовольствием хочу поблагодарить ее за неоценимый вклад;

она помогала мне писать каждую страницу.

Ждем ваших отзывов! Вы, читатель этой книги, и есть главный ее критик и комментатор. Мы ценим ваше мнение и хотим знать, что было сделано нами правильно, что можно было сделать лучше и что еще вы хотели бы увидеть изданным нами. Нам интересно услышать и любые другие замечания, которые вам хотелось бы высказать в наш адрес. Мы ждем ваших комментариев и надеемся на них. Вы можете прислать электронное письмо или просто посетить наш Web-сервер, оставив свои замечания, Ч одним словом, любым удобным для вас способом дайте нам знать, нравится или нет вам эта книга, а также выскажите свое мнение о том, как сделать наши книги более подходящими для вас. Посылая письмо или сообщение, не забудьте указать название книги и ее авторов, а также ваш e-mail. Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию последующих книг. Наши координаты: E-mail: WWW: 1*5? '^ ;

info@williamspublishing.com В этой книге, как и в большинстве других по компьютерной тематике нашего издательства, есть листинги программ. Чтобы получить их, обратитесь на наш Web-сервер.

WWW Содержание Х Введение В настоящее время реляционные системы управления базами данных (СУБД) являются важным инструментом во многих областях, начиная с таких традиционных областей применения, как бизнес, научные исследования, образование, и заканчивая разработкой поисковых серверов в Internet. Однако, несмотря на важность наличия хорошей базы данных для введения и доступа к информационным ресурсам, многие организации не применяют их в своей работе. Исторически сложилось так, что СУБД стоили очень дорого, а продавцы устанавливали очень высокие цены как на программное обеспечение, так и на услуги по технической поддержке. Кроме того, механизмы СУБД требовали удовлетворения существенных требований по производительности от аппаратных платформ, что еще больше повышало стоимость таких решений. В последние годы ситуация резко изменилась как с точки зрения программного обеспечения, так и с точки зрения аппаратуры. Компьютеры одновременно дешевеют и становятся мощнее. При этом обозначилась тенденция создания высокопроизводительных операционных систем, которые можно купить по цене дешевых лазерных дисков или даже получить бесплатно через Internet, таких как операционные системы, созданные на базе ОС BSD UNIX (FreeBSD, NetBSD, OpenBSD), а также различные версии ОС Linux (RedHat, Caldera, LinuxPPC). Создание операционных систем, позволяющих максимально использовать возросшие возможности компьютеров, произошло прежде всего благодаря тому, что были разработаны и свободно распространялись такие средства разработки, как компилятор GNU С gcc. Эти попытки создания программного обеспечения, которое было бы доступно для каждого, кто хочет его получить, дало толчок движению, которое сейчас известно как Open Source movement, и дало жизнь многим важным и нужным программам. В качестве примера успешного применения идеологии Open Source movement можно привести самый загруженный узел FTP в мире Ч ftp.cdrom.com, работающий под управлением ОС FreeBSD. Сервер Apache является самым широко используемым сервером в Internet. Еще одним успешным проектом Open Source является язык написания сценариев Perl и быстро завоевывающий поклонников язык РНР. Все это 22 ' Введение находится в разительном контрасте с патентованными решениями за очень высокую цену, и при этом даже не сопровождаемых исходными текстами. Программное обеспечение баз данных тоже стало более доступным. Достаточно вспомнить такие СУБД, как Postgres и mSQL, которые можно получить за невысокую плату или совсем бесплатно. Совсем недавно такие мощные коммерческие производители, как Informix и Oracle начали предлагать свое программное обеспечение совсем бесплатно для таких ОС, как Linux. (Однако эти продукты поставляются обычно в двоичном виде и без поддержки, что снижает их пользу.) Одним из новейших явлений на "арене" недорогих или бесплатных баз данных является MySQL, реляционная СУБД, типа клиент/сервер, созданная в Скандинавии. СУБД MySQL включает в себя SQL-сервер и программы-клиенты, осуществляющие доступ к серверу, средства администрирования и программный интерфейс для программирования своих собственных программ. СУБД MySQL "уходит своими корнями" в 1979 год и происходит от СУБД UN I REG, разработанной Михаэлем Видениусом по заказу шведской компании ТсХ. В 1994 году компания ТсХ начинает искать SQL-сервер для создания Web-приложений. Было опробовано несколько коммерческих серверов, но те оказались слишком медленными для больших таблиц данных, которые использовались в компании ТсХ. Они также обратили внимание на СУБД mSQL, но та не совсем удовлетворяла задачам компании ТсХ. Поэтому Монти начал работать над созданием нового сервера. Программный интерфейс был разработан как аналог mSQL, так как тогда в наличии было несколько бесплатных средств mSQL. Пользуясь аналогичным интерфейсом, эти же средства можно использовать для СУБД MySQL с минимальными затратами на перенос. В 1995 году Дэвид Оксмарк, работающий в компании Detron HB, начал "давление" на ТсХ с тем, чтобы она начала распространять СУБД MySQL через Internet. Кроме того, Дэвид принял участие в работе над документацией. Версия 3.11.1 СУБД MySQL была выпущена в свет в 1996 году в виде двоичной дистрибуции для работы под управлением ОС Linux и Solaris. Сегодня MySQL работает на многих платформах и распространяется как в двоичных кодах, так и в исходных текстах. СУБД MySQL нельзя причислить в полной мере к проектам Open Source, так как при определенных условиях покупка лицензии все же требуется. Тем не менее MySQL пользуется широкой популярностью среди сторонников движения Open Source, так как условия лицензирования здесь не очень строгие. (По сути, MySQL распространяется бесплатно за исключением тех случаев, когда вы намереваетесь ее продавать или продавать услуги, создаваемые с ее помощью.) Но популярность СУБД MySQL не ограничивается только сообществом Open Source. Да, она работает на персональных компьютерах (при этом многие разработки, производящиеся на MySQL, создаются на недорогих Linux-системах). Но MySQL обладает отличной переносимостью и Введение может с тем же успехом использоваться на дорогих коммерческих операционных системах (таких как Solaris, Irix или Windows) и на любой аппаратуре вплоть до мощных серверов. Более того, так же как и ее более "дорогие соперники", она позволяет обрабатывать большие базы данных, содержащие миллионы записей. Теперь СУБД MySQL предстала перед нами во всей красе: бесплатные операционные системы, работающие на мощных, но не очень дорогих персональных компьютерах, предоставляющих в распоряжение пользователей значительную вычислительную мощность и более широкий выбор операционных систем, чем прежде. Снижение экономических барьеров позволяет получить доступ к базам данных большему количеству людей и организаций, чем когда бы то ни было. Я, например, общаюсь с СУБД MySQL с помощью языков Perl и РНР, сервера Apache на ноутбуке G3 PowerBook, работающем под управлением ОС LinuxPPC. Это позволяет мне работать в любой точке земного шара. Полная стоимость такого проекта равна стоимости моего ноутбука. Прошли те времена, когда многие организации могли только мечтать об использовании огромных возможностей мощных реляционных СУБД. Теперь это уже не проблема. Цены на СУБД снизились, поэтому использовать СУБД можно уже и индивидуальным пользователям. Люди, даже не мечтавшие об использовании баз данных, теперь могут широко их применять, например, для реализации задачи хранения и просмотра данных о генеалогических исследованиях, ведения собственных коллекций (бабочки, марки, бейсбольные карточки и т.д.), помощи в своем бизнесе на начальной стадии или обеспечения поисковых возможностей персональных Web-страниц.

Все-таки, почему MySQL?

Если вы действительно ищете бесплатную или недорогую СУБД, можно остановить свой выбор на одной из трех кандидатур: MySQL, mSQL и Postgres или на бесплатных, но неподдерживаемых СУБД от крупных производителей. Сравнивая СУБД MySQL с другими базами данных, всегда помните о том, какой фактор является для вас самым важным. Производительность, поддержка, возможности (соответствие стандартам языка SQL, возможность расширения и т.д.);

условия лицензирования и ограничения и, наконец, цена. Принимая во внимание эти соображения, СУБД MySQL обладает многими преимуществами. Х Быстродействие. MySQL Ч достаточно быстродействующая СУБД. Разработчики склоняются к мнению, что СУБД MySQL является одной из самых быстрых баз данных из имеющихся на современном рынке. В этом можно удостовериться, посетив Web-узел h t t p : / / w w w. m y s q l. c o m / b e n c h m a r k. h t m l. Эта страница позволяет делать сравнительную проверку производительности на Web-узле MySQL. 24 Введение Х Простота использования. СУБД MySQL является высокопроизводительной и относительно простой в использовании СУБД, которую значительно проще инсталлировать и администрировать, чем многие большие системы. Х Цена. СУБД MySQL распространяется бесплатно для домашнего использования. (См. раздел "Можно ли получить MySQL бесплатно?".) Х Поддержка языка запросов. MySQL "понимает" команды языка SQL (Structured Query Language Ч структурированный язык запросов). Этот язык применяется во всех современных СУБД. MySQL также поддерживает интерфейс ODBC (Open Database Connectivity), протокол интерфейса с базами данных, разработанный компанией Microsoft. Х Возможности. Сервер позволяет одновременно подключаться неограниченному количеству пользователей. Доступ к серверу СУБД MySQL можно осуществить в интерактивном режиме с помощью различных интерфейсов, позволяющих вводить запросы и просматривать полученные результаты: это программыклиенты, работающие с командной строкой, Web-броузеры или программы-клиенты, работающие в системе X Window. Кроме того, в наличии имеются программные интерфейсы для таких языков, как С, Perl, Java, PHP и Python. Таким образом, можно использовать как готовое клиентское программное обеспечение, так и создавать свое собственное. Х Взаимодействие и безопасность. MySQL предназначена для работы в сети и может быть доступна через Internet, таким образом, с данными можно работать в любой точке земного шара. Но при этом СУБД MySQL снабжена развитой системой защиты от несанкционированного доступа. Х Переносимость. СУБД MySQL отлично работает как под управлением самых различных версий UNIX, так и под управлением систем, не использующих UNIX, таких как Windows и OS/2. СУБД MySQL работает как на домашних ПК, так и на мощных серверах. Х Открытое распространение. Дистрибуция СУБД MySQL легкодоступна. Для этого достаточно воспользоваться Web-броузером. Если вы не понимаете как что-либо работает, просмотрите исходный код. Если вам что-то в работе не нравится, можно внести коррективы. А как обстоят дела с поддержкой? Хороший вопрос, тем более, что от базы данных, которой нельзя пользоваться, польза невелика. Я не думаю, что эта книга сможет помочь вам во всем. Конечно, после прочтения этой книги у вас возникнут вопросы, о которых я сам никогда не задумывался или просто не хватало времени для описания такой проблемы.

Введение Но ответы на вопросы можно найти и в других источниках. Кроме того, СУБД MySQL имеет хорошую поддержку. Х СУБД MySQL снабжена расширенным справочным руководством (450 страниц и постоянное дополнение). Х Можно заключить контракты на техническую поддержку с самими разработчиками MySQL. Х Есть список рассылки, на который может подписаться любой желающий. В нем принимает участие очень много грамотных пользователей, в том числе включая и самих разработчиков MySQL. Этого будет достаточно для большинства пользователей СУБД MySQL. Ответы на вопросы, размещенные в списке рассылки, можно получить за считанные минуты Обнаружив ошибку, разработчики исправят ее за считанные дни (иногда часы!), и исправления можно получить немедленно по Internet. Это резко контрастирует с нередко разочаровывающим опытом работы с бюрократическими отделами поддержки больших компаний, продающих СУБД. (Вы уже это знаете? Я тоже. Я сам знаю, что мне лучше делать, когда у меня возникает вопрос об использовании того или иного программного продукта. Ожидать момента, когда продавец соблаговолит, наконец, найти время для ответа, или разместить свой вопрос в списке рассылки и проверять полученные ответы в удобное для меня время ) Если вы находитесь на этапе выбора, то СУБД MySQL является идеальным кандидатом для проведения оценки. Эту СУБД можно проверить в работе безо всякого риска и финансовых расходов. Если у вас возникают какие-либо проблемы, можно обратиться к списку рассылки Оценка всегда требует определенного времени, но это не относится к рассматриваемой СУБД, ее инсталляция и установка требует гораздо меньше времени, чем многие другие современные СУБД. Если вы уже работаете с другой СУБД Если вы уже работаете с другой СУБД, нужно ли переходить на MySQL? Это совсем необязательно. Зачем что-то менять, если вас вполне удовлетворяет система, на которой вы работаете в данный момент? Но если вас стесняет то, что вы используете, вам определенно стоит рассмотреть MySQL как возможную альтернативу используемой СУБД. Вероятно, проблемой является производительность вашей системы или права собственности и вы не хотите ограничиваться ими. Возможно, вы планируете перейти на новое аппаратное обеспечение, которое не поддерживает работу с вашей системой, или ваше программное обеспечение поставляется только в двоичном виде, а вам хотелось бы иметь исходные тексты, а ваша СУБД слишком дорого стоит! Это все может быть причиной для того, чтобы обратить внимание на MySQL. С помощью этой 26 Введение книги можно получить достаточно полное представление о возможностях MySQL, кроме того, можно задавать вопросы, используя список рассылки, и, вероятно, вы сможете найти ответы на все свои вопросы. Планируя переход с другой СУБД, работающей с SQL, обратитесь к сравнительной таблице на Web-узле MySQL по адресу crash-me-choose.htmy. После этого просмотрите главы, где описаны типы данных СУБД MySQL и диалект языка SQL. Вероятно, вы найдете, что диалекты языка SQL вашей СУБД и СУБД MySQL сильно отличаются, и перенос ваших приложений потребует больших затрат. Частично процедура оценки должна включать несколько пробных переносов, потому что на практике это может оказаться значительно проще, чем кажется Это может оказаться не настолько затруднительным, даже если ваша СУБД очень старая и не "понимает" команд SQL. Я недавно занимался преобразованием данных из формата СУБД, которую никак не назовешь СУБД SQL-типа. Типы данных не имели своих SQL-эквивалентов. Этот проект заключался в преобразовании методов доступа к сети, дюжины экранных программ и стандартных запросов. Переход потребовал полтора месяца напряженной работы. Получилось достаточно солидно.

Инструментарий, поставляемый с MySQL Дистрибуция MySQL включает следующие программные продукты. Х SQL-сервер. Эта программа обеспечивает доступ к базам данных. Х Клиентские программы для доступа к серверу. Это интерактивная программа, позволяющая делать запросы и просматривать полученные результаты, и несколько административных и сервисных программ, помогающих работать с вашим Web-узлом. Одна сервисная программа позволяет управлять сервером. Другие позволяют импортировать или экспортировать данные, проверять права доступа и т. д. Х Клиентская программа, позволяющая создавать свои собственные программы. Клиентские программы можно писать на С, так как сама библиотека написана на С, но библиотека также позволяет создавать шлюзы для написания программного обеспечения на других языках программирования. В дополнение к программному обеспечению, которое собственно поставляется с MySQL, СУБД MySQL используется многими талантливыми и способными людьми, которые имеют обыкновение создавать программное обеспечение для повышения своей производительности и хотят, чтобы эти достижения были доступны всем желающим. В результате, Введение если вы остановите свой выбор на СУБД MySQL, у вас в арсенале будет множество программных продуктов других производителей, которые значительно облегчат работу с MySQL. Можно ли получить MySQL бесплатно? СУБД MySQL является продуктом класса Open Source (Открытые исходные тексты), который можно получить бесплатно. Просмотреть детальное изложение основных принципов лицензионной политики можно в справочном руководстве по СУБД MySQL, но вкратце основные принципы лицензионной политики можно определить так. Клиентское ПО и библиотека программирования клиентов поставляются бесплатно для всех платформ. Х Сервер MySQL, работающий на ОС UNIX и других платформах, не использующих Windows, можно получить бесплатно за исключением случая, когда он нужен для продажи его самого или ПО и услуг, создаваемых с его помощью. В таком случае сервер необходимо лицензировать. Логика этой процедуры заключается в том, что если вы зарабатываете какие-то деньги на MySQL, то абсолютно резонно, что нужно поделиться и с разработчиками MySQL. (Ставка составляет 200 долларов в случае профессионального ис. пользования СУБД, плюс уйма бесплатного ПО, которое может повысить эффективность вашей работы.) Х Версия сервера MySQL, работающая под управлением ОС Windows, требует покупки лицензии. Х Старые версии MySQL доступны под GNU Public License (GPL) и могут использоваться бесплатно по любому назначению. СУБД MySQL версии 3.20.32а имеются в наличии на условиях лицензии GPL. Независимо от того, нуждаетесь вы в лицензии или нет, формальная поддержка от разработчиков СУБД MySQL обеспечивается бесплатно, и я призываю вас принять это к сведению. (Особенно, если вы работаете в компании, руководство которой не поощряет использование нелицензионного программного обеспечения.) Имеется несколько уровней поддержки, но кроме того, что вы получаете первоклассную поддержку, вы еще сами своей работой помогаете становлению и развитию СУБД MySQL, развивая таким образом все сообщество MySQL. Несколько слов о лицензии для Windows Нас спрашивают о том, зачем нужно иметь лицензию для сервера MySQL только потому, что мы работаем с Windows. Вопрос резонный, но он имеет и резонный ответ. Рассмотрим экономическую сторону проблемы. Для того чтобы разработать ПО, как минимум, нужны операционная система и средства разработки, такие как редактор и компилятор. С точки зрения этих требоХ Введение ваний, существует фундаментальное различие между процессом разработки программного обеспечения под UNIX и процессом разработки программного обеспечения под Windows. Работая под UNIX, можно получить множество программных средств совершенно бесплатно. Х Для этой операционной системы имеется богатый выбор операционных систем, таких как Linux, или один из вариантов BSD, таких как FreeBSD, NetBSD и OpenBSD. Х Что касается средств разработки, то все эти операционные системы поставляются укомплектованными текстовыми редакторами vi и emacs и компиляторами, такими как дсс и egcs. Х При появлении новых модификаций операционных систем или средств разработки их можно загрузить прямо из Internet или купив недорогой компакт-диск. Это справедливо даже для значительных обновлений. Х Х Х Однако стоимость разработки ПО на ОС Windows достаточно высока. Операционная система не поставляется бесплатно. Такие средства разработки, как компиляторы не являются бесплатными. Новые модификации операционной системы также не являются бесплатными, за исключением простых ошибок или минимальных модификаций.

Все это приводит к тому, что в то время как затраты на разработку под UNIX существенно малы, для Windows они уже будут значительны. Разработчики MySQL очень любят работать с СУБД MySQL, но не настолько, чтобы хотеть платить за эту привилегию. Затраты на разработку под Windows должны как-то компенсироваться, и плата за лицензию может служить компенсацией такого рода. Кроме того, разработчики обнаружили, что разработка под Windows занимает больше времени, чем разработка под UNIX. Так как время, необходимое для разработки, является постоянной составляющей капитала, то эта составляющая может быть компенсирована за счет стоимости ОС UNIX (которая, кроме всего прочего, является основной платформой СУБД MySQL). Плата за лицензию Windows обязывает затрачивать время и усилия на перенос ПО на платформу Windows. Если все же вы работаете с ОС Windows, но не хотите приобретать лицензию на сервер, в вашем распоряжении есть еще несколько вариантов. Х Получить тестовую версию СУБД MySQL, которой можно воспользоваться для оценки Это позволит вам поработать 30 дней с сервером, после чего вы можете принять решение, получать вам лицензию или нет. Х Если вам нужен Windows-сервер для использования в учебных заведениях или в государственных исследовательских учреждениях, можно связаться с разработчиками и договориться с ними об отмене или снижении платы за лицензию. Х Клиентские программы являются бесплатными в любом случае. Таким образом, если вам удастся найти кого-то, кто уже работает с сервером и кто может разрешить вам испопьзовать свою версию программного обеспечения, то у вас в распоряжении может оказаться полный набор возможностей для работы с СУБД MySQL. бдение Для кого предназначена эта книга В этой книге можно познакомиться с методами эффективной работы как с СУБД MySQL, так и с СУБД вообще. Это сделает вашу работу с MySQL более продуктивной. Вы познакомитесь с процессом наполнения базы данных информацией, узнаете, как формулировать запросы к базе данных, чтобы получить ответы, на вопросы, которые могут вас заинтересовать. Совсем не надо быть программистом или уметь работать с языком запросов SQL. Эта книга рассказывает, как это делается. Книга больше посвящена проблеме правильной работы с СУБД, чем тонкостям синтаксиса языка SQL. Она акцентирует внимание на уникальных возможностях СУБД MySQL, показывая, как можно их использовать с максимальной эффективностью. Читатель познакомится также с методами интеграции MySQL с другими средствами. В книге показаны приемы работы с MySQL с помощью языка РНР или Perl для создания динамических Web-страниц на основе запросов к базе данных. Читатель узнает, как можно написать свою несложную собственную программу, которая будет работать с базами данных СУБД MySQL. Все это расширяет возможности СУБД MySQL и позволяет с ее помощью решать задачи, поставленные перед вами. Если вы несете ответственность за администрирование СУБД MySQL, эта книга разъяснит вам ваши обязанности и то, как с ними справиться. Читатель узнает, как устанавливаются учетные записи пользователей, как делается резервное копирование базы данных, как обеспечивается полная безопасность вашего Web-узла Как написана эта книга Эта книга состоит из четырех частей. Часть I. Использование СУБД MySQL Х В главе 1, "Знакомство с СУБД MySQL и SQL", разъясняется, для чего используется СУБД MySQL, описывается процесс обучения работе с интерактивной клиентской программой MySQL и даются основные положения языка SQL. Х В главе 2, "Работа с данными в MySQL", описаны типы столбцов СУБД MySQL, свойства и ограничения каждого типа, когда и как их можно использовать, как делать выбор между подобными типами данных, производить оценку выражения и преобразование типов. Х В главе 3, "Синтаксис и использование языка SQL", описан специфический диалект языка SQL, применяемого в MySQL. В этой Введение главе особый акцент делается на тех особенностях SQL, которые присущи диалекту MySQL. Тут также описаны особенности, присущие и другим базам данных, но отсутствующие в MySQL. В главе 4, "Оптимизация запросов", затронуты проблемы повышения эффективности работы запросов. Часть II. Программные интерфейсы СУБД MySQL В главе 5, "Введение в программирование в СУБД MySQL", описаны программные интерфейсы, которые имеются в MySQL, и дается сравнение программных интерфейсов API, описанных детально в этой книге. В главе 6, "Программный интерфейс MySQL С API", излагаются примеры создания программ на языке С с использованием интерфейса API из клиентской библиотеки, поставляемой с дистрибуцией MySQL В главе 7, "Программный интерфейс Perl API", показаны методы использования модуля DBI при создании сценариев Perl. Обсуждается как проблема автономных сценариев, так и CGI-сценариев, предназначенных для программирования Web-узлов. В главе 8, "Интерфейс API для языка написания сценариев РНР", описано, как для создания динамических Web-страниц, осуществляющих доступ к MySQL, использовать язык написания сценариев РНР. Часть III. Администрирование MySQL В главе 9, "Введение в администрирование MySQL", показано, в чем состоят обязанности администратора базы данных и что ему нужно знать, чтобы Web-узел функционировал успешно. В главе 10, "Каталог данных MySQL", приводится детальное изучение структуры и содержимого каталога данных, вы также узнаете, где СУБД MySQL сохраняет данные и файлы состояния. В главе 11, "Общее администрирование MySQL", показано, как можно убедиться в том, что сервер запускается и останавливается правильно во время запуска и остановки вашей системы. Кроме того, эта глава содержит инструкции по установке учетных записей MySQL, описание процедур по обслуживанию файлов регистрации, настройке сервера, описание стратегии резервного копирования и восстановления.

Введение " В главе 12, "Безопасность", разъясняется, что надо сделать для того, чтобы обезопасить СУБД MySQL от несанкционированного доступа как пользователей на узле сервера, так и клиентов, подключающихся по сети. В главе 13, "Безопасность", показано, как с помощью профилактического обслуживания можно уменьшить вероятность отказа сервера и как происходит восстановление после отказа, который все-таки произошел. Часть IV. Приложения В приложении А, "Получение и инсталляция программного обеспечения", объясняется, где можно приобрести и как установить программные средства, представленные в этой книге. В приложении Б, "Типы столбцов", описаны типы данных СУБД MySQL. В приложении В, "Операторы и функции", описаны операторы и функции диалекта SQL. В приложении Г, "Синтаксис SQL", описаны все операторы SQL, соответствующие стандарту MySQL. В приложении Д, "Программы MySQL", описаны программы, имеющиеся в дистрибуции MySQL. В приложении Е, "Программный интерфейс приложений С", описаны все типы данных и функций клиентской библиотеки MySQL С. В приложении Ж, "Программный интерфейс DBI языка написания сценариев Perl", описаны методы и атрибуты, поддерживаемые модулем DBI языка Perl. В приложении 3, "Программный интерфейс языка РНР", описаны функции, которые имеются в языке РНР для поддержки MySQL. В приложении И, "Утилиты независимых разработчиков", дан краткий обзор имеющихся вспомогательных средств MySQL, таких как преобразование данных и утилиты администрирования. В приложении К, "Провайдеры услуг Internet", перечислены факторы, которые принимаются во внимание при выборе провайдера для обеспечения доступа к MySQL (что нужно предусмотреть провайдеру, предоставляющему доступ к MySQL-серверу). Как читать эту книгу Какую часть книги вы бы не изучали, это лучше всего сопровождать выполнением примеров. Для этого нужно самостоятельно или с чьей Введение либо помощью установить СУБД MySQL, если она еще не установлена, а затем получить все необходимые файлы тестовой базы данных. Ссылка на эту базу данных будет делаться на протяжении всего нашего повествования. В приложении А есть указание, где можно получить все инструкции по установке. Если вы совсем ничего не знаете о MySQL или о SQL, начните с главы 1. Там есть введение, в котором даются базовые знания о MySQL и языке SQL, что позволит упростить восприятие книги. После этого можно перейти к остальному материалу. Потом идут главы 2 и 3, в которых читатель узнает, как создается структура данных и как можно манипулировать ими. Даже если читатель уже знаком с языком SQL, вам все-таки будет полезно ознакомиться с главами 2 и 3. Все диалекты языка SQL различаются, и нужно знать, в чем заключается отличие данного диалекта SQL от тех диалектов, с которыми вы уже знакомы. Вероятно, вы уже имеете какое-то представление о СУБД MySQL, но нуждаетесь в освоении методов решения конкретных задач. В этом случае данную книгу можно использовать в качестве справочника, знакомясь с темами по мере необходимости. Вы будете создавать программы, обрабатывающие данные из базы данных. В этом случае рекомендуется ознакомиться с главами, посвященными программным интерфейсам, начиная с главы 5. При необходимости создать Web-интерфейс для работы со своей СУБД MySQL или расширить возможности своего Web-узла, добавив динамические возможности СУБД, ознакомьтесь с содержанием глав 7 и 8. Вы уже пользуетесь какой-то СУБД и хотите получить сравнительную характеристику этой СУБД с СУБД MySQL, в этом вам сможет помочь несколько глав данной книги. Для сравнения MySQL и SQL, которую вы сейчас используете в своей работе, прочтите главы, посвященные типам данных и синтаксису SQL (часть I). Если вас интересует проблема адаптации существующего прикладного программного обеспечения, ознакомьтесь с соответствующими главами из части II и главами, посвященными решению задач администрирования в части III, для получения руководства по административной поддержке, которая требуется для установки MySQL. Эта информация будет также полезна, если вы не используете базу данных, а делаете сравнительный анализ СУБД MySQL с другими СУБД с целью выбора одной из них. Вам нужен доступ к MySQL и вы ищете подходящего провайдера (Internet Service Provider Ч ISP), который предоставляет такой сервис? Для этого обратитесь к приложению К, "Провайдеры услуг Internet". Кроме того, это приложение содержит советы для провайдеров, планирующих предоставлять услуги сервера MySQL.

Введение 2- Версии программного обеспечения, которые упоминаются в этой книге На момент написания этой книги стабильно работающими версиями MySQL являются все версии серии 3.22 (ведется активная разработка серии 3.23). Эта книга опирается на обе серии. Описанные в этой книге возможности СУБД MySQL могут отсутствовать в ранних версиях (включая серию 3.21). Для других основных пакетов, описанных здесь, все сказанное в книге справедливо для любой последней версии. Текущими версиями других описанных в этой книге программных продуктов являются следующие. Пакет PerlDBI Драйвер Perl MySQL DBI РНР Apache CGI pm Версия 1 13 1 22 хх (стабильно), 1.23 хх (бета) 3 0 12 (4 0 в ближайшем будущем) 13 2 Все программное обеспечение, описанное в этой книге, можно получить непосредственно из Internet. Инструкции, каким образом можно получить MySQL, поддержку Perl DBI, PHP, Apache и CGI.pm вашей системы даны в приложении А, "Получение и инсталляция программного обеспечения". Это приложение также содержит руководство по получению тестовой базы данных, которая используется в примерах, приведенных в этой книге, и примеры программ, которые были разработаны в главах этой книги. Соглашения, используемые в этой книге В этой книге приняты следующие типографские соглашения. Специальным шрифтом обозначаются имена узлов, файлов, каталогов, а также команды, опции и Web-узлы. Команды отображены в том виде, в котором они выводятся. Полужирным шрифтом выделяется часть, которая вводится. Подсказка указывает на то, каким образом запускается команда: %Ч команда запускается обычным пользователем UNIX, # Ч команда запускается пользователем root;

команда запускается под управлением Windows. Введение с: \> Ч Курсивом обозначается часть команды, которая должна быть заменена вводимым значением. В операторах SQL ключевые слова и функции SQL записаны в верхнем регистре. Имена баз данных, таблиц и столбцов задаются в нижнем регистре. В синтаксических правилах квадратными скобками выделяются те части, которые могут не указываться. Дополнительные источники Целью этой книги является изложение материала, необходимого для работы с СУБД MySQL. Но куда обратиться, если возникает вопрос, на который книга не дает ответа? В числе полезных источников можно назвать Web-узлы, которые могут вам пригодиться. Пакет MySQL PerlDBI PHP Apache CGIpm Web-узел Как работать со справочным руководством по СУБД MySQL Чтобы быть в курсе последних событий и модификаций, обязательно периодически посещайте интерактивное справочное руководство по MySQL Это руководство модифицируется сразу же после внесения ноII вых изменений Эти узлы содержат ссылки на различные формы информации, такие как справочные руководства, самые часто задаваемые вопросы и списки рассылки Х Справочное руководство. СУБД MySQL поставляется в комплекте с основной документацией Ч справочным руководством. Оно предлагается вашему вниманию в самых различных форматах, включая и интерактивную версию. Руководство по языку РНР тоже имеется в нескольких форматах, но формат on-line имеет большую тенденцию к полноте изложения, чем печатные версии. Отдельно документированы модуль DBI и его драйвер для MySQL. В документе DBI изложены общие концепции. В документе, описывающем драйвер MySQL, перечислены специфические возможности СУБД MySQL. Введение Х Вопросы. Приводятся разъяснения по наиболее популярным вопросам об использовании DBI, РНР и Apache. Х Списки рассылки. Имеется несколько списков рассылки, специализирующихся на вопросах, которым посвящена эта книга. Неплохо подписаться на один из них, Но помните, что вам необходимо научиться пользоваться архивами, которые имеются в этих списках. В момент ознакомления с новым программным средством, у вас обязательно возникнут вопросы, возникавшие (и на которые давались ответы) миллионы раз. Поэтому нет смысла задавать их опять, если можно быстро найти ответы в архивах. Правила подписки на списки рассылки варьируются, информацию можно найти по адресам, перечисленным ниже.

Пакет MySQL PerlDBI PHP Apache Правила подписки на списки рассылки Х Вспомогательные Web-узлы. Кроме основных Web-узлов, программные средства могут обсуждаться и на вспомогательных Webузлах. Обязательно просматривайте ссылки "Links" на посещаемых вами официальных узлах.

Введение I Использование СУБД MySQL В этой части... 1. 2. 3. 4. Знакомство с СУБД MySQL и SQL Работа с данными в MySQL Синтаксис и использование языка SQL Оптимизация запросов Знакомство с СУБД MySQL и SQL Эта глава Ч введение в систему управления реляционными базами данных MySQL и язык структурированных запросов (SQL), который "понимает" СУБД MySQL. Тут описаны основные термины и концепции, а также база данных, которая будет использована во всех примерах, приведенных в этой книге. В главе приведен обучающий материал, на примере которого можно научиться пользоваться СУБД MySQL. Если вы новичок в вопросах использования баз данных, без колебаний начните ознакомление с книгой с этой главы. Отсюда следует начинать ознакомление с этой книгой в случае, если вы не ничего знаете о СУБД MySQL или языке SQL и вам нужно ознакомительное руководство. Читатели, которые уже имеют опыт работы с СУБД MySQL или с любой другой СУБД, могут пропустить этот материал. Однако всем будет полезно ознакомиться с разделом "Пример базы данных". Этот материал будет использоваться на протяжении всей книги.

Часть I. Использование СУБД MySQL Назначение СУБД MySQL В этом разделе приведены примеры использования СУБД MySQL. Читатель получит представление о том, что может СУБД MySQL и как ее использовать. Если вам все это уже известно, можно смело перейти к разделу "Пример базы данных". По сути система баз данных представляет собой способ манипулирования информационными списками. При этом информация может поступать из различных источников. Например, это могут быть данные, полученные в ходе исследований, деловые записи, заказы потребителей, спортивная статистка, отчеты о продажах, отчеты об ошибках или оценки учащихся Несмотря на то, что СУБД могут содержать широкий диапазон информации, вы не будете использовать СУБД только из-за нее самой. Хорошим примером является список продуктов. Список содержит перечень покупок, из которого затем вычеркиваются купленные продукты А потом этот список удаляется. Вряд ли вы воспользуетесь СУБД в этих целях. Даже в том случае, если у вас есть переносной ПК, вы воспользуетесь программой Блокнот, а не возможностями СУБД. СУБД проявляет себя как мощный инструмент тогда, когда информация, которую необходимо организовать и которой уже необходимо манипулировать, становится объемной и сложной, вследствие чего записи становятся непонятными и трудно обрабатываемыми вручную. Конечно, базы данных могут использоваться большими корпорациями, обрабатывающими миллионы транзакций в день. Но СУБД может также потребоваться для маломасштабных операций, которые обрабатывает один человек в личных целях. Можно привести множество примеров ситуаций, когда СУБД будет использоваться даже в том случае, когда объемы информации не возросли до огромных размеров. Некоторые из таких ситуаций описаны ниже. Х В вашем столярном бизнесе занято несколько работников. Нужно упорядочить записи о работниках и выплатах таким образом, чтобы иметь представление, кому вы и когда платили, получить возможность составлять отчеты о доходах в налоговые инстанции Могут также понадобиться записи о нарядах, которые выполнял работник, и информация о том, кто планировался для выполнения этой работы. Х Вы содержите сеть складов автомобильных запасных частей. Необходимо получить оперативную информацию о том, на каком из складов лежит запасная часть, заказанная покупателем. Х Вы продавец игрушек и зависите от колебания спроса на игрушки. Вам необходимо знать тенденции в продажах определенных товаров так, чтобы иметь возможность оценки необходимости увеличения складских накоплений (для товаров, которые становятся более популярными) или уменьшения (нет нужды хранить на складе то, что уже не будет хорошо продаваться). Глава 1. Знакомство с СУБД MySQL и SQL Нужно проанализировать гору данных, полученных в ходе исследований за долгие годы, чтобы фраза "опубликуй или погибни" не стала эпитафией вашей карьеры. Вам необходимо переварить массу данных, чтобы получить итоговую информацию и более детальные выборки для более подробного статистического анализа. Вы известный докладчик, объезжающий страну с докладами в различных аудиториях: будь то выпускные церемонии, деловые встречи и т.д. Часто вспомнить, что вы говорили в той или иной аудитории, бывает довольно затруднительно. Поэтому потребовалось вести протоколы своих встреч с тем, чтобы использовать их в своих планах на будущее. Это нужно для того, чтобы не повторяться в одной и той же аудитории. В этом случае запись о докладе, проведенном в этой аудитории, поможет избежать повторений. Кроме того, можно оставлять запись о том, насколько хорошо здесь был принят ваш доклад. Учитель ведет записи об успеваемости и посещаемости своих уроков. После каждого теста вы записываете оценку, полученную каждым учащимся. Простым решением является запись оценок в журнале, но последующее использование этих записей затруднительно. При этом затруднительна сортировка учеников по баллам. Кроме того, учет посещаемости также вырастает в большую проблему. Вы работаете в организации секретарем и ведете список членов этого общества. (Организация может быть самой разной Ч профессиональное общество, клуб, театр, симфонический оркестр или атлетический клуб.) На основании постоянно корректируемого документа ежегодно издается список членов. Этот документ редактируется по мере изменения информации о членах организации. Из-за ограничений, присущих этому методу, вы устали вести список вручную. Трудно сортировать записи. Довольно проблематично выбрать только определенную часть каждой записи (например, перечень, состоящий только из фамилий и телефонов). Или трудно выбрать ту часть зарегистрированных членов общества, срок членства которых истек и которым следует немедленно возобновить свое членство. Кроме того, вы хотите избежать редактирования этого списка собственноручно, но бюджет общества не позволяет нанять кого-либо для выполнения этой работы. Вы что-то где-то слышали о "безбумажном офисе", когда информация хранится в электронном виде, но не видели никакой выгоды от внедрения этой технологии для себя. Записи о членстве хранятся в электронном виде, но, по иронии, они хранятся в труднодоступной форме.

Часть I. Использование СУБД MySQL Такие сценарии применимы как для ситуаций с большими объемами информации, так и для ситуаций с малыми объемами информации. Все их можно охарактеризовать как класс задач, которые в принципе можно производить вручную, хотя эффективнее они могут обрабатываться с помощью СУБД. Каких преимуществ можно ожидать от использования такой СУБД, как СУБД MySQL? Это зависит от ваших конкретных задач и требований Ч и, как видно из приведенных примеров, может сильно варьироваться. Давайте представим себе ситуацию, которая возникает достаточно часто, и поэтому очень показательна при использовании СУБД MySQL. СУБД часто применяется для таких задач, для решения которых обычно используются картотеки. Действительно, базу данных можно представить в некотором роде большой картотекой. Можно назвать несколько очень серьезных преимуществ ведения данных в электронном виде перед хранением информации вручную. Например, в офисе, где ведутся учетные записи клиентов, использование СУБД MySQL значительно облегчит вам жизнь. Преимущества применения СУБД MySQL описаны ниже. Х Сокращение времени, необходимого для ведения записей. В случае использования СУБД много времени на просмотр всей картотеки на предмет необходимости добавления новой записи не требуется. Вы просто вводите ее в систему, не заботясь о месте размещения. Х Сокращение времени, необходимого для поиска записей. При поиске данных в СУБД нет необходимости последовательно просматривать все записи, чтобы найти интересующую. Предположим, что вы работаете в стоматологическом кабинете Надо разослать приглашения всем пациентам, которые забыли пройти профилактический осмотр. Для этого достаточно сделать запрос к информационной системе. Конечно, это происходит не так, как при обычном общении с людьми, когда вы формулируете свой запрос примерно таким образом: "Найдите, пожалуйста, тех пациентов, которые не посещали нас на протяжении последних 6 месяцев". При работе с базой данных вы делаете такую странную сентенцию:

SELECT last_name, first_name, last_visit FROM patient WHERE last_visit < DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) Возможно, вы никогда не встречали ничего подобного, но перспектива получить ответ через секунду или две вместо изнурительного многочасового просмотра записей должна показаться привлекательной. (В любом случае не стоит волноваться. Эта абракадабра скоро не будет казаться вам такой уж странной.) Х Гибкость поиска. Нет необходимости искать записи строго в соответствии с порядком, в котором они были записаны (по фамилии пациента, например). Информационной системе можно приказать расположить записи, отсортированные в любом порядке: по фамилии, названию страховой компании, дате последнего визита и т. д. Глава 1. Знакомство с СУБД MySQL и SQL Х Гибкость формата вывода. После того как необходимые записи были найдены, копировать записи вручную не нужно. Можно сделать запрос информационной системе на вывод нужного списка. Иногда достаточно просто распечатать информацию. В других случаях вам может понадобиться воспользоваться этими данными в другой программе. (Например, после получения списка пациентов, которые забыли сделать регулярный профилактический осмотр, эти данные можно переслать в текстовый редактор и уже на основании этой информации распечатать приглашения этим пациентам посетить ваш кабинет.) Предположим, что вам нужна только итоговая информация, такая как счетчик выбранных записей. И это совсем не обязательно делать вручную. Информационная система сгенерирует такой отчет сама. Х Одновременный многопользовательский доступ к записям. Предположим, что сразу два человека хотят одновременно просмотреть одну запись. При бумажном способе ведения дел второй кандидат всегда вынужден ждать, пока первый закончит просмотр бумаг. СУБД позволяет получить доступ к одной и той же записи одновременно. Х Удаленный доступ и передача записей в электронном виде. Бумажная технология ведения дел требует от вас быть там, где находятся сами бумаги, в противном случае кто-то должен скопировать и переслать их вам. Электронный способ ведения записей позволяет производить удаленный доступ к записям и передачу их в электронном виде. Предположим, что ваша стоматологическая фирма состоит из подразделений, удаленных территориально, электронный способ ведения учета позволяет производить доступ к вашим записям из удаленных офисов. Нет необходимости посылать копии записей о пациентах курьером, даже если кто-либо не имеет в своем распоряжении базы данных, аналогичной вашей, но имеет электронную почту. Ему можно будет посылать содержимое базы данных в электронном виде. Тот, кто имел опыт работы с СУБД, знает об этих преимуществах и может уже подумать не только о банальном замещении бумажной картотеки. СУБД теперь используются для предоставления услуг, о которых еще недавно не могло быть и речи Примером тому может служить использование многими организациями баз данных в совокупности с доступом к Internet. Предположим, что ваша компания имеет базу данных учета материальных ценностей, которой пользуются менеджеры при поступлении запросов от потребителей о наличии и стоимости товаров. Это достаточно традиционное использование баз данных, однако, если ваша компания может создать свой Web-узел, в перечне сервисов которого потребителям предоставляется возможность самим узнать о наличии товара на складе и его цене, это позволит потребителям самим получать нужную им инфор42 Часть I. Использование СУБД MySQL маиию о товарах и способах их поставки. При этом потребитель получает информацию немедленно, не слушая раздражающую музыку в телефонной трубке. Такой магазин может работать круглые сутки. Для всех посетителей вашего Web-узла это будет означать, что им придется сделать на один звонок меньше. Но базе данных можно найти еще лучшее применение. Запросы на поиск товара, сделанные через ваш Web-узел, могут служить источником информации не только для тех, кто их делает, но и для вас самих. Вы сможете получить ответ на очень важный вопрос: "Что нужно потребителю?" А результаты выполнения запросов потребителей покажут, сможете ли вы удовлетворить их запросы. Если у вас нет того, что им нужно в данный момент, ваш бизнес может прогореть Поэтому есть смысл хранить информацию о спросе на товары и о имеющемся ассортименте. Имея под руками такую информацию, вы сможете эффективно управлять запасами товаров на складе и тем самым удовлетворять спрос покупателей. Еще одним новейшим применением баз данных на Web-страницах может служить реклама на баннерах. У меня есть причины не любить их больше всех, но факт остается фактом. Они являются популярным применением СУБД MySQL, который может здесь быть использован для хранения рекламы и поиска ее Web-сервером для отображения. Кроме того, СУБД MySQL может хранить данные о том, как часто происходили обращения к данному роду деятельности, об отслеживании рекламы, которая сработала, сколько раз она запрашивалась, с каких узлов был произведен доступ и т.д. Итак, как же работает СУБД MySQL? Лучший способ узнать это Ч самостоятельно с ней поработать.

Пример базы данных В этом разделе описывается тестовая база данных, которая будет использоваться в книге дальнейшем. Приведены исходные тексты тестовых программ, которые помогут понять глубже принципы работы СУБД MySQL. Примеры созданы на базе двух сценариев. Х Сценарий секретаря организации. Нам нужен какой-то более определенный термин, чем "организация". Поэтому давайте воспользуемся такими характеристиками, как группа людей, объединенных интересом к истории Соединенных Штатов Америки (назовем ее за отсутствием лучшего названия "Исторической Лигой США"). Члены этого общества подтверждают свое членство, периодически выплачивая взносы. Взносы покрывают такие накладные расходы организации, как публикация журнала "Хроника прошлого США". Организация имеет свой небольшой, не очень хорошо разработанный Web-узел. Он содержит только информацию о том, что представляет собой "Историческая Лига США" (в дальнейшем Ч "Историческая Лига"), ее штат и как можно стать ее членом. Глава 1. Знакомство с СУБД MySQL и SQL Х Сценарий учета успеваемости учащихся. В процессе обучения вы ведете учет результатов опросов и тестов, записываете оценки и присваиваете степени. После этого определяются окончательные оценки, которые представляются руководству школы вместе с данными о посещаемости. Теперь давайте оценим более детально эти сценарии, исходя из следующих критериев Вам предстоит решить, для чего вам нужна база данных Ч т.е. какие цели вы ставите перед собой. Х Необходимо четко определить ту информацию, которой вы хотите наполнить базу данных, Ч т.е. какие данные должны отслеживаться. Возможно, такая последовательность критериев может показаться странной. Ведь очевидно, что до того как делать выборку информации из базы данных, ее нужно наполнить данными. Но способ использования вами базы данных зависит от конкретных задач. А задачи больше связаны назначением базы данных, чем с тем, что вы внесли в нее. Наверняка вы не будете попусту тратить время и силы на ввод информации в базу данных, если не имеете намерений использовать эту информацию в дальнейшем. Х "Историческая Лига" Отправная точка этого сценария: вы как секретарь этой организации и ведете список членов в текстовом редакторе. Этого достаточно для распечатки списка, но совершенно недостаточно при любом другом применении информации. У вас есть три цели, которые перечислены ниже. Х Вам необходимо получить возможность делать вывод информации в разных форматах, получая при этом только лишь необходимые данные Одна цель Ч получить возможность распечатывать список каждый год Ч традиция, которой придерживается "Историческая Лига". Можно придумать и другие применения информации, хранящейся в списке, например, получать список действительных членов "Исторической Лиги" для включения их имен в программу ежегодного банкета организации. Для выполнения этой задачи требуются различные наборы данных. В печатном списке используется все содержимое записи о члене "Исторической Лиги". Для программы банкета достаточно только получить имена и фамилии членов организации (это не так просто в случае работы с текстовым редактором). Х Необходимо производить поиск в членском списке, руководствуясь самыми разнообразными критериями. Например, необходимо определить, кому из членов нужно скоро будет обновить членство. Другая задача, также требующая поиска, связана со списком ключевых слов, которые вы определяете для каждого члена. Эти ключевые слова очерчивают те периоды истории США, которые входят в круг научных интересов данного члена (например, Гражданская 44 Часть I. Использование СУБД MySQL война в США, Великая Депрессия, гражданские права или биография Томаса Джефферсона). Члены "Исторической Лиги" иногда интересуются тем, чем интересуются другие их коллеги для того, чтобы найти единомышленников. Х Вы хотите разместить список членов на Web-узле "Исторической Лиги". Это будет полезно как для членов, так и для вас. Если вам удастся преобразовать список в Web-страницу с помощью автоматического процесса, интерактивный вариант списка всегда будет более актуальным, чем печатный. И если этот список будет снабжен функцией поиска, члены организации получат возможность просматривать информацию самостоятельно. Например, член "Исторической Лиги", который хочет узнать, кто из других членов интересуется историей Гражданской войны в США, сможет сделать это, не ожидая, пока это сделает для него секретарь. Да и вам не потребуется тратить на это свое время. Я отлично понимаю, что база данных не является самой совершенной вещью на свете. Поэтому я очень далек от того, чтобы провозгласить, что базы данных стимулируют созидательное мышление. Тем не менее, когда вы прекратите думать об информации как о чем-то, требующем усилий (как это бывает при работе с обычными документами, созданными в текстовом редакторе), а будете думать о том, что можно достаточно просто манипулировать данными (как это должно быть в случае с СУБД MySQL), это поможет вам быстрее создавать новые подходы к использованию или отображению информации. Х Информация может быть выведена из базы данных на Web-узел "Исторической Лиги". Это позволяет организовать ведение информации по-другому. Например, членам общества можно предоставить возможность самим редактировать информацию о себе и в базе данных. И таким образом полностью отпадает необходимость делать редактирование самостоятельно. Это позволит иметь в базе данных более актуальную информацию. Х В базе данных могут храниться адреса электронной почты членов организации Ими можно воспользоваться для рассылки сообщений членам, которые не обновили свое членство. Эти сообщения могут содержать текущее содержимое их записей, просьбу обновить их, а также указания, как это сделать прямо на Web-узле. Х База данных может помочь вам сделать Web-узел более функциональным и полезным, даже без списка членов. "Историческая Лига" публикует журнал "Хроника прошлого США", в котором ведется детский раздел с викториной. Один из последних выпусков викторины был посвящен биографиям президентов США. Webузел тоже может иметь детский раздел со своей викториной, работающий в режиме on-line. Вероятно, что этот раздел может быть интерактивным, и информация для викторины будет заноситься Глава 1. Знакомство с СУБД MySQL и SQL прямо в базу данных. Таким образом, при генерации вопросов Web-сервер делает запрос базы данных случайным образом. Отлично! С этого момента число пользователей базы данных позволит вам понять, что вы немного отклонились от предначертанной цели. После небольшого тайм-аута вернитесь с небес на землю и задайте себе пару вопросов, затрагивающих практические аспекты. Х Не слишком ли много амбиций? Не слишком ли много требуется проделать работы? Нет ничего проще, чем задумать что-либо и не сделать этого. Я совсем не хочу сказать, что все это просто реализовать. Тем не менее, к концу этой книги вы уже сможете проделать все то, что здесь было запланировано. Просто надо помнить, что ничего нельзя сделать сразу. Следует разделить работу на отдельные этапы. И постепенно, шаг за шагом, их осуществлять. Х Способна ли СУБД MySQL делать все это? Нет. Например, СУБД MySQL не обладает непосредственной способностью работать с Internet. Но если СУБД MySQL сама не обладает такими возможностями, для этого есть программное обеспечение, дополняющее и расширяющее возможности СУБД MySQL. Для написания сценариев доступа к базам данных СУБД MySQL мы воспользуемся языком написания сценариев Perl и модулем DBI (database interface Ч интерфейс базы данных). Язык Perl обладает отличными возможностями и позволяет производить вывод данных в различных форматах. Например, с помощью Perl список можно выдавать в формате Rich Text Format (RTF). Это формат, который воспринимается любым текстовым редактором. Мы также можем воспользоваться языком написания сценариев РНР. Язык РНР полностью адаптирован к написанию Webприложений и позволяет работать с базами данных. Это позволит генерировать запросы СУБД MySQL прямо с Web-страниц и генерировать новые страницы, содержащие результаты запросов к базе данных. Этот язык хорошо адаптирован для работы с Webсервером Apache (самый популярный Web-сервер), упрощающим выборку данных и отображение результатов выборки. СУБД MySQL хорошо интегрируется с этим программным обеспечением и позволяет гибко комбинировать его по своему усмотрению в соответствии с поставленными задачами. Это интегрированный компонент, обладающий высокой степенью интеграции "все в одном". Х И наконец, самый больной вопрос Ч сколько все это стоит? Бюджет организации довольно ограничен. Но как ни удивительно, это не будет вам ничего стоить. Если вы знакомы с основными базами данных, имеющимися на рынке, то должны знать, что они достаточно дороги. В отличие от них, СУБД MySQL обычно распространяется бесплатно. При определенных условиях необходима лицензия, стоимость которой составляет 200 долларов за неограниченное количество пользователей. (Для ознакомления с условиями лицензирования см. руководство по 46 Часть I. Использование СУБД MySQL СУБД MySQL.) Бесплатно распространяется и другое программное обеспечение (Perl, DBI, PHP, Apache). Выбор операционной системы ложится целиком и полностью на вас. Все программное обеспечение работает под ОС UNIX, большинство под ОС Windows. Я могу порекомендовать вариант с ОС UNIX. Все программное обеспечение было разработано для среды UNIX и позже перенесено в Windows. Поэтому оно чаще используются в UNIX, чем под Windows. Co всей определенностью можно сказать, что версии под Windows менее отлажены и протестированы. Теперь давайте рассмотрим другой сценарий использования базы данных. Проект "Учет успеваемости" Отправным пунктом этого сценария является учитель, на которого возложены обязанности учета успеваемости учащихся. У вас существует намерение заменить ручной учет, который производился с помощью журнала, на электронное ведение дел с помощью СУБД MySQL. В этом случае вы хотите извлечь из базы данных то же, что и из вашего журнала успеваемости По результатам викторин и тестов записываются баллы, полученные учащимися. Баллы тестов имеют такое обозначение, чтобы с первого взгляда на них можно было определить оценку (А, В, С, D и F). Х В конце каждого учебного периода производится подсчет суммарного балла каждого учащегося. Затем они сортируются и на их основании проставляются оценки. Суммы могут содержать взвешенные коэффициенты, так как вы, вероятно, захотите акцентировать внимание на результатах тестов, а не на результатах викторин. Х По завершению учебного периода вы представляете оценку посещаемости школьному руководству. Целью этого проекта является попытка избежать сортировки и суммирования оценок успеваемости и посещаемости вручную. Другими словами, СУБД MySQL вам нужна для сортировки оценок и вычислений, необходимых для получения суммарных баллов учащихся и числа пропусков занятий по завершении учебного периода. Для этого необходимы список учащихся, баллы, полученные за каждую викторину или тест, даты пропуска занятий учащимися. Каким образом пример базы данных можно использовать в конкретном случае Вас не интересует ни пример с "Исторической Лигой", ни пример учета успеваемости/посещаемости? Ответом может быть то, что эти примеры не могут являться самоцелью. Это только средство, с помощью коГлава 1. Знакомство с СУБД MySQL и SQL 47 Х торого демонстрируются возможности СУБД MySQL и соответствующего программного обеспечения. Теперь рассмотрим, как примеры запросов к базе данных применимы к конкретным задачам, которые вы собираетесь решать. Предположим, что вы работаете в стоматологическом кабинете. Автор уже ссылался на этот пример. В этой книге вы не найдете никаких примеров, связанных со стоматологией, но вы встретите много запросов, которые смогут вас заинтересовать. Например, поиск членов "Исторической Лиги", которые должны возобновить свое членство, аналогичен определению пациентов, пропустивших свой очередной профилактический осмотр. И, действительно, оба запроса базируются на датах. Так, если вы знаете, как написать запрос на обновление членства, вы легко сможете создать запрос о неаккуратных пациентах. Основная терминология баз данных Вы, наверное, почувствовали, что, пролистав достаточно много страниц этого фолианта, все еще не окунулись в жаргон и техническую терминологию. Я не сказал ни слова о том, как в действительности выглядит "база данных". Коротко были определены цели применения базы данных. Однако это возможно только на этапе проектирования базы данных. Этому вопросу и посвящен данный раздел. Тут описаны термины, встречающиеся в этой книге. К счастью, концепция реляционных баз данных достаточно проста. И действительно, многие преимущества реляционных баз данных заложены в простоте базовых концепций. Структурная терминология СУБД MySQL классифицируется как реляционная система управления базами данных (RDBMS Ч relational database management system). Эта аббревиатура разбивается на части следующим образом. Х База данных (БД) (DB в RDBMS) Ч это совокупность информации, разбитой простым способом, регулярным образом. Х Совокупность данных в базе данных объединена в таблицы. Х Таблица состоит из строк и столбцов.

Х Строка таблицы является ее записью. Х Записи содержат несколько единиц информации, каждый столбец таблицы содержит одну такую единицу. Х Система управления (СУ) (MS) является программным обеспечением, позволяющим вставлять, выбирать, модифицировать и удалять записи. Х Слово "реляционная" обозначает популярную разновидность СУБД, в которых отслеживается "соответствие" записей в одной Часть I. Использование СУБД MySQL таблице на "соответствие" записей в другой таблице. Мощь реляционных СУБД заключается в их способности выбирать соответствующие данные из этих таблиц и создавать ответы на вопросы, которые нельзя получить только из одной такой таблицы. Приведем пример того, как реляционная база данных объединяет данные в таблицы и связывает данные из одной таблицы с данными из другой таблицы. Предположим, что вы сопровождаете Web-узел, представляющий сервис размещения баннеров. Вы поддерживаете контакт с компаниями, которые хотят разместить свою рекламу. Эта реклама будет появляться при каждом посещении вашего Web-узла. Всякий раз, когда посетитель вашего узла попадает на одну из ваших страниц, вы вместе с ней посылаете встроенную рекламу на броузер посетителя и получаете с рекламируемой компании небольшой гонорар. Для отображения этой информации воспользуемся тремя таблицами (рис. 1.1). Первая таблица company содержит столбцы с именами компаний, номером, адресом и телефонным номером. Вторая таблица ad содержит номера реклам, компаний, которым принадлежат эти рекламы, сумму, которую вы берете с них за один доступ к их рекламе. Третья таблица hits регистрирует количество обращений к рекламе и дату, когда это произошло. Ответы на некоторые вопросы можно получить, пользуясь информацией из одной таблицы. Для определения количества компаний, с которыми у вас имеются контракты, достаточно посчитать строки в таблице company. Аналогично, для подсчета количества обращений за определенный период времени достаточно таблицы hit. Другие вопросы посложнее и, для получения ответов на них, необходимо опросить не одну, а несколько таблиц. Например, для определения, сколько раз было сделано обращение ко всем рекламам компании Pickles, Inc. 14 июля вам потребуется просмотреть три таблицы. 1. По названию компании (Pickles, Inc.) в таблице company определить номер компании (14). 2. По номеру компании найти соответствующие ему записи в таблице ad, содержащие номера рекламы. В нашем примере мы видим две такие записи 48 и 101. 3. С помощью номера рекламы для всех найденных в таблице ad записей определить соответствующие записи в таблице hit, попадающие в нужный диапазон дат, а затем подсчитать количество совпадений. Найдено три совпадения для рекламы номер 48 и два совпадения для рекламы номер 101. На первый взгляд, непросто. Но это лишь основа, на которой зиждется совершенство реляционных баз данных. Здесь сложность несколько иллюзорна. Ибо каждый только что описанный шаг содержит нечто большее, чем простые операции выборки: вы связываете одну таблицу с Другой с подбором значений из строк одной таблицы со строками другой Глава 1. Знакомство с СУБД MySQL и SQL таблицы. Эта простая операция может быть использована различными способами для получения ответов на следующие вопросы. Сколько различных реклам имеет каждая компания? Рекламы какой компании наиболее популярны? Сколько дохода приносит каждая реклама? Каков полный гонорар от каждой компании за текущий период? Таблица company company_name Big deal, Ltd. Pickles, Inc. Real Roofing Co. GigaFred & Son Таблица ad company_num 14 23 17 13 23 23 23 13 23 14 13 17 Таблица hit ad_num 49 55 48 63 101 62 119 102 52 48 64 119 48 101 63 49 77 99 company_num 13 СЮH 17 23 ad_num d>-i 49 52 55 62 63 64 77 99 address phone 14 Grand Blvd. 875-2934 59 Cucumber Dr. 884-2472 928 Shingles Rd. 882-4173 2572 Family Ave. 847- 102 date July 13 July 13 July 14 July 14 July 14 July 14 July 14 July 14 July 14 July 14 July 14 July 14 July 14 July 14 July 15 July 15 July 15 July hit_fee 0.01 0.02 0.01 0.03 0.02 0.01 0.02 0.03 0.03 0.01 0.01 0. Рис. 1.1. Таблицы учета баннерной рекламы Часть I. Использование СУБД MySQL.

Теперь вы достаточно знаете теорию реляционных баз данных, чтобы понять оставшийся материал, изложенный в этой книге. Здесь мы не будем углубляться в изучение третьей нормализованной формы, диаграмм "СущностьЧсвязь" и других высоконаучных проблем. Если вы и вправду хотите вникнуть в эти вопросы, что само по себе уже страшно, я могу предложить вам обратиться к трудам таких столпов науки о базах данных, как Кодд или Дейт. Терминология языка запросов SQL Для общения с СУБД MySQL применяется язык, называемый SQL (Stuctured Query Language Ч Язык структурированных запросов). В настоящее время SQL является стандартом работы с базами данных. Все основные СУБД понимают его. SQL включает много разных типов операторов, разработанных для взаимодействия с базами данных. Как и в случае с другими языками, SQL при первом знакомстве может показаться несколько странным. Например, создавая таблицу, необходимо указать СУБД MySQL, какую структуру она должна иметь. Вы и я можем представить себе таблицу в виде диаграммы или рисунка, но СУБД MySQL этого не может. Таким образом, создать таблицу можно, только сказав СУБД MySQL что-то вроде следующего.

CREATE TABLE company ( company_name CHAR(30), company_num INT, address CHAR(30), phone CHAR(12) ) Новичку такой оператор может показаться странным, но совсем не надо быть программистом, чтобы научиться эффективно применять его с SQL. Познакомившись с этим языком ближе, вы будете смотреть на оператор CREATE TABLE в другом свете: как на союзника, помогающего описывать информацию, а не как на колдовскую головоломку, состоящую из битов. Терминология архитектуры СУБД MySQL СУБД MySQL использует традиционную архитектуру клиент/сервер, поэтому, работая с СУБД MySQL, пользователь реально работает с двумя программами. Х Программой сервера базы данных, расположенной на компьютере, где хранится база данных. Она "прослушивает" запросы клиентов, поступающие по сети, и осуществляет доступ к содержимому базы данных для предоставления информации, которую запрашивают клиенты. Глава 1. Знакомство с СУБД MySQL и SQL Х Клиентской программой, которая является программой, осуществляющей подключение к серверу и передающей запросы на сервер. Дистрибуция СУБД MySQL включает в себя несколько клиентских программ и сервер. Клиентские программы используются в соответствии с поставленными целями. Одной из наиболее популярных и наиболее привлекательных клиентских программ является mysql. Это интерактивная программа, позволяющая создавать запросы и просматривать полученные результаты. Другими клиентскими программами являются утилита mysqldump и mysql import, которые осуществляют дамп базы данных в файл и восстановление его обратно, и утилита mysqladmin, позволяющая производить проверку состояния сервера и осуществлять административные задачи, такие как выключение сервера (shut-down). Клиентские программы могут не подходить по своим функциональным возможностям для ваших целей, тогда вам может пригодиться библиотека для написания своей собственной программыклиента СУБД MySQL. Эту библиотеку можно вызывать прямо из программ, написанных на языке С. Для других языков программирования предусмотрены свои библиотеки. Архитектура клиент/сервер СУБД MySQL имеет ряд преимуществ. Х Сервер обеспечивает контроль параллельного доступа, что не позволяет двум пользователям одновременно модифицировать одну запись. Все клиентские запросы проходят через сервер, таким образом сервер знает, кто производит доступ к базе, что и когда он хочет сделать. При одновременном доступе нескольких пользователей к одной и той же таблице базы данных им нет необходимости предварительно искать друг друга и договариваться между собой. Х Нет необходимости регистрироваться на компьютере, где расположена база данных. СУБД MySQL может работать через Internet. Поэтому клиентская программа может быть запущена везде, где угодно, а клиент сам производит соединение с сервером через сеть Расстояние не имеет значения. К серверу можно подключиться из любой точки мира. Даже если сервер находится в Австралии, к нему можно подключиться с помощью переносного компьютера из Исландии. Значит ли это, что любой человек может подключиться к вашей базе данных через Internet? Конечно нет. СУБД MySQL снабжена гибкой системой защиты, которая позволяет иметь доступ к базе данных только тем, кто имеет на это право. Кроме того, этим пользователям должно быть разрешено делать только то, что они имеют право делать. Очевидно, что Салли из биллингового управления должна иметь право на чтение или модификацию записей, а Фил из отдела обслуживания только на их просмотр. СУБД MySQL позволяет соответствующим образом определять их права. 52 Часть I. Использование СУБД MySQL Учебный курс по СУБД MySQL Теперь вы обладаете базовыми знаниями, которые необходимы вам на этом этапе. Приступим к работе с СУБД MySQL! В этом разделе читатель познакомится с СУБД MySQL. Для этого здесь приведен учебный курс по СУБД MySQL. По мере ознакомления с учебным курсом читатель создаст базу данных с таблицами, а потом попробует поработать с нею, добавляя, удаляя и модифицируя информацию, а также осуществляя ее поиск. Кроме того, в процессе работы с учебной базой данных читатель сможет узнать следующее. Х Основные принципы работы с сервером СУБД MySQL с помощью клиентской программы mysql. Х Основы языка SQL, который понимает СУБД MySQL. (Для тех, кто уже знаком с языком SQL по опыту работы с другой СУБД, также будет полезно просмотреть этот учебный материал для того, чтобы иметь понятие о различиях, имеющихся в данной версии языка SQL.) Как отмечалось в предыдущем разделе, в своей работе СУБД MySQL использует архитектуру клиент/сервер. В соответствии с этой архитектурой сервер работает на машине с базой данных, а клиенты подключаются к серверу через сеть. Этот учебный курс в основном базируется на использовании клиентской программы mysql. Эта программа получает SQL-запросы от пользователя, посылает их на сервер для выполнения и возвращает результат пользователю. Клиент mysql работает на любой платформе, имеющей поддержку СУБД MySQL, и предоставляет наиболее прямые средства взаимодействия с сервером. Поэтому логичнее начать наш учебный курс с сервера. Назовем учебную базу данных samp_db. Однако может потребоваться воспользоваться другим именем для обозначения базы данных. Вероятно, что кто-то уже использует имя samp_db для обозначения своей базы данных, и ваш администратор предоставит вам другое имя. В любом случае вы можете свободно заменить имя базы данных samp_db на любое другое. Таблицам рекомендуем давать имена, аналогичные тем, которые приведены в примерах. Это допустимо даже, если аналогичную учебную базу Данных уже создало несколько пользователей вашей системы. В СУБД MySQL не имеет никакого значения то, что несколько пользователей применяют одноименные таблицы. Таблицы хранятся в различных базах Данных, и СУБД MySQL не позволит им пересечься. Предварительные требования Предварительно необходимо установить СУБД MySQL. В частности, необходимо иметь доступ к клиентам СУБД MySQL и какой-либо сервер СУБД MySQL. Клиентские программы устанавливаются на вашем комГлава 1, Знакомство с СУБД MySQL и SQL пьютере. По крайней мере вам понадобится mysql, также может пригодиться утилита mysqlimport. Сервер также может быть установлен на вашем компьютере, хотя в этом нет необходимости. Имея право на подключение к серверу, вы можете располагать его где угодно. Предположим, что клиент и сервер установлены на вашем компьютере Все готово. Если же надо приобрести СУБД MySQL, то для справок см. приложение А, "Получение и инсталляция программного обеспечения". При этом, если вы устанавливаете его самостоятельно, просмотрите главу, в противном случае Ч покажите ее администратору базы данных. Если подключение к сети происходит через провайдера Internet (ISP) убедитесь в том, что ваш провайдер имеет СУБД MySQL В том случае, если ваш провайдер услуг Internet не предоставляет услуг СУБД MySQL, обратитесь к приложению К, "Провайдеры услуг Internet", где вы найдете полезные советы о том, как можно найти подходящего провайдера После этого необходимо получить право на создание своей тестовой базы данных и ее таблиц. Если такого права нет, обратитесь к администратору базы данных Он может дать вам такое право с помощью следующих команд.

GRANT ALL ON samp_db.* TO paul@localhost IDENTIFIED BY "secret" GRANT ALL ON samp_db.* TO paul@% IDENTIFIED BY "secret" Различие между MySQL и mysql Во избежание разночтений, хочу подчеркнуть, что MySQL относится ко всей СУБД MySQL, a "mysql" - название конкретной клиентской программы В разговорной речи это звучит одинаково, но в написании одно наименование пишется заглавными буквами, а другое Ч прописными С одной стороны, MySQL, произносится как "май-эс-кью-злл" Это известно из руководства по использованию MySQL С другой стороны, SQL произносится как "сиквел" Это зависит от того, кого вы спрашиваете Я не настаиваю ни на одном из вариантов Произносите это слово как вам угодно, но будьте готовы к тому, что кто-нибудь, когда-нибудь вас поправит Первая команда дает пользователю paul полный доступ к базе данных samp_db и всем ее таблицам, когда paul подключается с адреса 1оcalhost (узел на котором работает сервер). Он также назначает ему пароль secret. Вторая команда аналогична, но позволяет пользователю paul осуществлять полный доступ к базе данных с любого узла ('%' Ч синоним всего). Здесь можно заменить символ "%" именем конкретного узла. (Оператор GRANT может вам пригодиться для доступа с узла localhost, благодаря тому, что сервер просматривает таблицы привилегий для входящих соединений.) Дополнительную информацию об операторе GRANT и установке учетных записей СУБД MySQL можно найти в главе 11, "Общее администрирование MySQL".

Часть I. Использование СУБД MySQL Пример тестовой базы данных Этот обучающий материал в определенной мере имеет отношение к файлам из примера тестовой базы данных. Это файлы, содержащие запросы и данные, которые могут оказаться полезными при установке учебной базы данных. О том, как можно получить тестовую базу данных обратитесь к приложению А, "Получение и инсталляция программного обеспечения". После разархивирования примера будет автоматически создан каталог samp_db, содержащий все необходимые файлы. Я рекомендую сделать этот каталог текущим. Установка и завершение связи с сервером Для подключения к серверу вызовите программу mysql из своей оболочки (т.е. из подсказки ОС UNIX, или из DOS-консоли под управлением ОС Windows). Вот эта команда: % mysql options Для отображения подсказки операционной системы я воспользуюсь обозначением ' % '. Это одна из стандартных подсказок ОС UNIX, другой такой подсказкой является подсказка ' $'. Под ОС Windows подсказка будет иметь вид ' с: \ > '. Часть опций командной строки mysql может быть пустой, но, вероятнее всего, эта строка будет иметь вид: % mysql Чh host_name Чu user_name Чp Возможно, вам не потребуется указывать все ключи при запуске клиентской программы mysql. Для определения точного синтаксиса этой командной строки обратитесь к СУБД MySQL. Может потребоваться указание имени и пароля Первоначально новичок может подумать, что система безопасности СУБД MySQL будет только раздражать и затруднять работу с СУБД. (Для создания базы данных и получения доступа к ней необходимо получить разрешение и при каждом подключении к серверу вводить свое имя и пароль) Однако после того, как вы начнете создавать и использовать свои собственные записи, ситуация кардинально изменится. Тогда вы уже сможете оценить то, что СУБД MySQL не позволяет другим пользователям просматривать (или, что еще хуже, уничтожать!) ваши данные. А теперь рассмотрим, что означают следующие опции. Х Чh host_name (альтернативная форма Ч host=host_name). Указывает имя серверного узла, к которому вы хотите подключиться. Если сервер работает на том же компьютере, на котором работает и клиент, эту опцию можно смело опустить. Х Чu user_name (альтернативная форма Ч user= user_name). Указывает имя пользователя, зарегистрированное в СУБД MySQL Если имена пользователей ОС UNIX и СУБД MySQL совпадают, Глава 1. Знакомство с СУБД MySQL и SQL этот ключ тоже можно опустить. При этом клиентская программа mysql будет использовать ваше регистрационное имя в качестве имени пользователя СУБД MySQL. Работая в Windows, имя пользователя по умолчанию будет ODBC. Возможно, это вам не очень пригодится. Существует возможность указать свое имя в командной строке или установить свою среду по умолчанию, указав имя пользователя paul в команде set. % set USER=paul и Чр (альтернативная форма password).

Эта опция подсказывает СУБД MySQL, что нужно запросить ваш пароль. Обратите внимание: существует возможность задать пароль в командной строке следующим образом:

-pyour_password (альтернативная форма:

-password=your_password). Однако из соображений безопасности лучше этого не делать. Указание ключа -р без указания пароля укажет СУБД MySQL на то, что необходимо произвести запрос пароля в момент запуска. Например:

% mysql Чh host_name Чu user_name Чp Enter password:

Когда пользователь получит отклик Enter password:, он должен будет ввести пароль. (Пароль традиционно не выводится на экран на тот случай, если кто-то заглядывает через ваше плечо) Отметим, что ваш пароль в СУБД MySQL не обязательно совпадает с паролем в ОС UNIX или ОС Windows. При полном отсутствии ключа -р mysql решает, что пароль вам не нужен и не выводит подсказки. |! Совет Ключи -h и -и связаны по смыслу со словами, следующими за ними, независимо от того, есть ли пробел между ключом и последующим словом. Это не относится к ключу -р При определении пароля в командной строке пробела между ним и ключом быть не должно ;

Например, предположим, что имя пользователя и пароль в СУБД MySQL соответственно paul и secret и что пользователь хочет подключиться к серверу, запущенному на том же компьютере, на котором он работает. Для этого необходимо задать следующую команду mysql:

% mysql Чu paul -p Enter password: ****** После ввода команды mysql ответит подсказкой Enter password:. Пользователь вводит пароль, который отображается по мере ввода ****** (здесь был введен пароль secret). Если пароль правильный, mysql ответит подсказкой mysql>. Это свидетельствует о том, что СУБД MySQL ожидает ввода новых запросов 56 Часть I. Использование СУБД MySQL В целом последовательность команд для подключения к серверу СУБД выглядит следующим образом: % mysql -ш paul -p Enter password: ****** Welcome to the MySQL monitor/ Commands end with ;

or \g. your MySQL connection id is 1805 to server version: 3.22.25-log Type 'help' for help. Mysql> Для подключения к серверу, работающему на каком-либо другом компьютере, дополнительно требуется с помощью ключа Чh указать имя узла. Предположим, что узел имеет имя pit-viper.snake.net, тогда команда будет иметь вид: % mysgl Чh pitЧviper.snake.net Чu paul Чp В большинстве из приведенных здесь примеров демонстрируется применение ключей Чh, Чu и Чр. Это делается с одной целью Ч научить читателя правильно использовать эти ключи. Существуют способы настройки учетной записи таким образом, что необходимость задавать все параметры при каждом подключении к серверу отпадет. Установленное соединение с сервером можно прервать в любой момент командой QUIT:

mysql> QUIT Bye Кроме того, завершить сеанс можно комбинацией клавиш (по крайней мере в ОС UNIX). Ввод запросов Запросы к базе данных можно вводить только после подключения к серверу. В этом разделе рассказано о работе с клиентской программой mysql. Для ввода запроса в mysql достаточно его напечатать, ввести в конце точку с запятой и нажать клавишу . Точка с запятой индицирует окончание запроса (завершать запрос можно и двумя символами "\g", если вам не лень вводить два символа вместо одного). После ввода запроса mysql передает его серверу на выполнение. После обработки запроса сервер передает результат клиенту mysql. Клиент отображает полученный результат. Вот пример простого запроса и его результат. mysql> SELECT NOW() ;

+ + I NOW{) | ХI. L 1999-07-24 11:02:36 | row in set ( 0. 0 0 sec) Глава 1. Знакомство с СУБД MySQL и SQL Он заключается в выводе текущей даты и времени. (Сама по себе функция NOW () бесполезна, но ею можно воспользоваться в самых различных выражениях, Ч например, для вычисления разницы между датами.) Программа mysql также выводит количество строк в результате. В дальнейшем эту строку в примерах отображать не будем. Программа mysql воспринимает точку с запятой как окончание запроса, поэтому, при необходимости, запросы могут занимать несколько строк mysql> SELECT NOW(), ->USER(), ->VERSION() | NOW () I USERO I VERSION!) I I 1999-07-24 11:02:36 I paul@localhost 1 3. 23. 1-aplha-log 1 4. 44. Обратите внимание, что подсказка меняется с mysql> на -> после ввода первой строки запроса. Это означает, что mysql ожидает продолжения ввода запроса Это очень важный элемент обратной связи, показывающий пользователю, что даже если вы забыли ввести точку с запятой, mysql ожидает ее ввода и показывает, что ввод запроса еще не завершен Другими словами, пока пользователь сидит и удивляется, почему так долго нет ответа от mysql, клиент mysql, в свою очередь, ожидает завершения ввода запроса! В большинстве случаев регистр, на котором вводится команда, не имеет значения. Запросы, приведенные ниже, эквивалентны.

SELECT USERO select user() SeLeCt UsErO Примеры этой книги выполнены в соответствии со следующим правилом: заглавными буквами подаются все ключевые слова и функции языка SQL;

для имен баз данных, таблиц и столбцов используется нижний регистр При вызове функции в запросе недопустим пробел между именем функции и последующими скобками.

mysql> SELECT NOW() ;

NOW() I 11999-07-24 11:02:36 I mysql> SELECT NOW () ;

ERROR 1064: You have an error in your SQL syntax near ' ) at line 1 (' Эти два запроса выглядят аналогично, но второй сообщает об ошибке из-за того, что скобки не следуют прямо за именем функции. 58 Часть I. Использование СУБД MySQL Начав вводить запрос, а затем передумав, введите "\с" для его отмены.

mysql> SELECT NOW(), ->USER(), ->\о mysql> х Обратите внимание, что подсказка опять изменилась на mysql>. Это свидетельствует о том, что mysql ожидает ввода нового запроса. Запросы можно сохранять в файле и затем запускать их на выполнение прямо из файла, не создавая вновь. Для этого можно воспользоваться функциями переназначения ввода/вывода. Например, если запрос сохранен в файле m y _ f i l e. s q l, его можно выполнить с помощью команды: % mysql < my_flie.sql Таким образом можно вызвать любой файл. Для того чтобы показать, что файл содержит операторы SQL, был указан суффикс.sql. Работа mysql более детально будет освещена в разделе "Дополнение таблиц". Таким образом будут добавлены данные в базу данных samp_db Действительно, намного удобнее заполнить таблицу с помощью операторов INSERT, считываемых из файла, чем вводить каждый оператор отдельно В оставшейся части этого раздела будут продемонстрированы запросы, работу которых читатель сможет повторить затем сам. Их можно найти по подсказке ' mysql>' перед запросом и завершающей точке с запятой Как правило, эти примеры сопровождаются полученным результатом запроса. Читатель сможет ввести запросы сам и получить аналогичный ответ Запросы, показанные без подсказки и завершающей точки с запятой, несут смысловую нагрузку просто как разъяснение материала, и их выполнять нет смысла (При желании, их можно запустить на выполнение, не забывая при этом завершать оператор точкой с запятой.) В последующих главах этой книги я не буду задавать подсказку 'mysql>' и точку с запятой в конце оператора SQL. Одной из причин этого можно назвать то, что SQL-операторы можно задавать и в других средах (например, сценариях Perl или РНР, где нет подсказки и не требуется точка с запятой в конце). Создание базы данных Начнем с создания базы данных samp_db, ее таблиц, заполнения таблиц и выполнения простейших запросов по этим данным. Работа с базой данных предполагает несколько этапов. Х Создание (инициализация) базы данных. Х Создание таблиц в базе данных Глава 1. Знакомство с СУБД MySQL и SQL Х Взаимодействие с таблицами посредством операций вставки, выборки, модификации или удаления данных. Выборка существующих данных фактически является самой частой операцией при работе с базой данных. В числе других наиболее частых операций над таблицами базы данных являются вставка новых данных, их модификация и удаление. Далее частота использования операций располагается следующим образом: операция создания таблиц и операция создания базы данных. Начнем с самого начала. Поэтому нашей первой операцией будет наименее часто выполняемая операция Ч создание базы данных. Затем создание таблиц, загрузка начальных данных, а уже потом наиболее популярная в базах данных операция Ч выборка. Для создания базы данных необходимо подключиться к серверу. Для этого воспользуемся клиентской программой mysql. После этого с помощью команды CREATE DATABASE samp_db;

зададим имя базы данных.

mysql> CREATE DATABASE samp_db;

Очевидно, что перед тем как приступать к созданию различных таблиц, необходимо создать саму базу данных, которая будет включать их в себя. Каков механизм создания базы данных? Делает ли создание базы данных ее текущей базой данных? Нет. Это можно увидеть по результату запроса.

mysql> SELECT DATABASE ();

н + I DATABASE() | ч+ I I Для перевода базы данных samp_db в статус текущей необходимо ввести оператор USE. mysql> USE samp_db Оператор USE один из немногих операторов, который не требует точки с запятой в своем синтаксисе, хотя при необходимости их туда можно добавить. Другим подобным оператором является оператор HELP. Введя его, вы сможете узнать полный перечень операторов, для которых не требуется точка с запятой. После ввода оператора USE база данных samp_db становится текущей.

mysql> SELECT DATABASE();

DATABASE ( ) | I samp_db...

Часть I. Использование СУБД MySQL В качестве другого способа активизации базы данных можно назвать следующий: достаточно указать имя базы данных в командной строке вызова клиента. % mysql samp_db Это обычный способ активизации базы данных. Перед именем базы данных можно задать другие инициализирующие параметры. Например, следующие две команды позволят подключиться к базе данных samp_db на локальном узле и на узле pit-viper.snake.net. % mysql Чu paul Чр samp_db % mysql Чh pitЧviper.snake.net Чu paul Чp samp_db Во всех последующих примерах предполагается, что при запуске mysql производится активизация базы данных samp_db в командной строке. Создание таблиц В этом разделе мы создадим таблицы, составляющие базу данных samp_db. Сначала рассмотрим таблицы из проекта "Историческая Лига". Затем наступит очередь таблиц проекта "Учет успеваемости". Мы сейчас находимся в той точке повествования, с которой во многих книгах начинаются рассуждения об анализе и проектировании, диаграммах "сущность-связь", процедурах нормализации. В такой последовательности изложения есть рациональное зерно, но я предлагаю прежде всего задуматься над тем, как будет выглядеть наша база данных: что будут содержать таблицы и как отображать наши данные. Есть масса вариантов представления данных. В зависимости от требований, предъявляемых к приложениям, и от предназначения данных, одни и те же данные можно представлять различными способами.

Таблицы проекта "Историческая Лига" Набор таблиц для проекта "Историческая Лига" достаточно прост. Х Таблица president. Содержит данные о президентах США. Это нужно для викторины в режиме on-line на Web-узле (интерактивный аналог напечатанной викторины, которая появляется в детском разделе газеты, издаваемой "Исторической Лигой"). Х Таблица member. Содержит текущую информацию о каждом члене "Исторической Лиги". Она предназначена для печатной и интерактивной версии списка членов, а также автоматической рассылки напоминаний о продлении членства. Таблица president Таблица p r e s i d e n t проще, поэтому начнем с нее. Она содержит описание основных биографических данных из жизни всех президентов США. Глава 1. Знакомство с СУБД MySQL и SQL Х Имя. Имена можно хранить различными способами. Например, для хранения всего имени и фамилии можно воспользоваться одним столбцом. А можно для хранения имени и фамилии создать отдельные столбцы. Конечно же, проще воспользоваться первым методом, но это создаст определенные проблемы в будущем. Х Если в такой столбец сначала вводится имя, а затем фамилия, то сортировка по фамилии будет затруднена. Х Если ввод производится в обратном порядке, то отображение имени и фамилии, следующими после имени, будет затруднено. Х Выборка по именам будет затруднена. Например, при поиске конкретной фамилии можно использовать шаблон. Это менее эффективно и значительно медленнее, чем производить поиск непосредственно по фамилии. В таблице member для обхода этих ограничений имя и фамилию нужно будет хранить в отдельных столбцах. Столбец имени также будет содержать отчество или инициал. Этс не затруднит работу с этим столбцом, так как сортировать по отчеству нет необходимости. Отображение будет иметь вполне приемлемый вид независимо от формата, в котором оно будет произво диться "Bush, George W." или "George W. Bush,". Отчество следуе сразу же за именем. Существует еще одно небольшое затруднение. Всего один прези дент (Jimmy Carter) имеет окончание "Jr." в конце имени. Что эт( значит? В зависимости от формата отображения имя президент будет иметь вид "James E. Carter, Jr." или "Carter, James E., Jr.' Суффикс "Jr." не ассоциируется ни с именем, ни с фамилией. По этому для хранения его создадим еще одно поле. Вот вам ярки пример того, как даже одно значение может создать проблемы пр проектировании структуры базы данных. Отсюда видно, наскольк важно иметь как можно более полную информацию о данных, которыми придется работать на этапе создания базы данных. Н СУБД MySQL позволяет менять структуру баз данных во время t использования. Это не катастрофа, но этого нужно избегать. Х Место рождения. Аналогично имени и фамилии, эти данные мох но хранить как вместе, так и отдельно. Проще использовать од! столбец. Но и в этом случае раздельное хранение позволит вам д лать многие вещи, которые в противном случае будут существен t затруднены. Например, будет проще сделать выборку по президсч там, родившимся в каком-то одном штате, если город и штат хр^ нятся раздельно. Х Даты рождения и смерти. Единственной проблемой в этом случае является то, что нет даты смерти, если президент еще жив. СУБД MySQL имеет механизм присвоения пустого значения NULL, озна62 Часть I. Использование СУБД MySQL чаюшее, что значения нет. Это значение будем использовать для обозначения "в настоящее время жив". Таблица member Таблица member предназначена для фиксации членства в "Исторической Лиге". Она аналогична таблице president в том смысле, что в ней хранится вся основная описательная информация для одного человека. При этом каждая запись таблицы member хранит больше столбцов. Х Имя. В этой таблице мы будем хранить имена подобно тому, как это сделано в таблице president в трех отдельных столбцах: фамилия, имя (и при наличии отчество), суффикс. Х Идентификационный номер. Это уникальное значение, присваиваемое каждому новому члену. "Историческая Лига" никогда раньше не использовала идентификационных номеров для регистрации своих членов. Теперь это поможет систематизировать записи. (Я предвижу, как читатель в дальнейшем будет расширять использование СУБД MySQL. Это произойдет тогда, когда читатель начнет пользоваться информацией, хранящейся в базе данных. Когда это произойдет, вы увидите, что для ссылки на имена членов из других вновь созданных таблиц будет удобнее использовать идентификационные номера, хранящиеся в таблице member.) Х Срок завершения полномочий. Члены организации должны периодически возобновлять свое членство. В некоторых приложениях может представлять интерес дата самого последнего возобновления членства. Но это не имеет отношения к случаю "Исторической Лиги", где членство может быть возобновлено на определенное количество лет (обычно один, два, три года или пять лет), и дата последнего возобновления не подскажет вам, когда было последнее возобновление. Кроме того, "Историческая Лига" имеет институт так называемого пожизненного членства. Пожизненное членство можно отобразить какой-то достаточно дальней датой, но очевидно, что значение NULL больше подойдет для этой цели. Значение "нет значения" больше соответствует "никогда не завершается". Х Адрес электронной почты. Это облегчит общение между членами "Исторической Лиги", имеющими электронную почту. Для секретаря это упростит рассылку напоминаний о возобновлении членства. Отпадет необходимость ходить на почту, да это и обойдется дешевле. Электронной почтой можно воспользоваться и для того, чтобы разослать членам общества их учетные записи с просьбой обновить их в случае, если появились какие-либо изменения в адресе, фамилии и т. д. Глава 1. Знакомство с СУБД MySQL и SQL Х Почтовый адрес. Эти данные необходимы для тех членов организации, у которых нет электронной почты (или которые не отвечают на письма). Название улицы, города, почтового индекса будем хранить в отдельных столбцах. Столбец с названием улицы дублируется для хранения номера почтового ящика, для случая, когда в адресе члена есть только он. Я предполагаю, что все члены "Исторической Лиги" живут в США. Для международных организаций это будет упрощением, но для нашей задачи это вполне подходит В случае хранения адресов из разных стран читатель обязательно увязнет в проблемах хранения адреса в различных форматах. Например, применение почтового индекса не является международным стандартом, многие страны делятся на провинции и области, а не на штаты. Х Телефонный номер. Очень полезен для поддержания контактов с членами "Исторической Лиги". Х Ключевые слова для определения области интересов. Без сомнения, областью научных интересов всех членов "Исторической Лиги" является история США, но вероятно, что каждый из них имеет свои специфические интересы. Этот столбец предназначен для хранения соответствующей информации. Он будет полезен для поиска по интересам. Создание таблиц Теперь можно приступить к созданию таблиц базы данных "Историческая Лига". Воспользуемся оператором CREATE TABLE, который имеет следующий синтаксис: CREATE TABLE tbl_name (column_specs) Здесь атрибут tbl_name содержит имя таблицы, спецификацию столбцов и индексов в таблице (если дексы нужны для ускорения просмотра таблицы. О позже в главе 4, "Оптимизация запросов". Оператор CREATE TABLE, предназначенный для president, имеет следующий вид:

CREATE TABLE president ( last_name VARCHAR(IS) NOT NULL, first_name VARCHAR(IS) NOT NULL, suffix VARCHAR(S) NULL, City VARCHAR(20) NOT NULL, state VARCHAR(2) NOT NULL, birth DATE NOT NULL, death DATE NULL ) a column_specs Ч они имеются). Инних мы поговорим создания таблицы Но перед этим нужно запустить mysql, используя команду: % mysql samp_db 64 Часть I. Использование СУБД MySQL Затем введите оператор CREATE TABLE, приведенный выше (не забудьте ввести точку с запятой в конце оператора, в противном случае mysql не будет знать, где оператор кончается). Для создания таблицы president с помощью файла из дистрибуции примера базы данных (см. раздел "Получение и инсталляция дистрибуции базы данных samp_db") запустите из оболочки следующую команду: % mysql samp_db < create_jpresident. sql Во время каждого запуска mysql в командной строке перед именем базы данных указывайте необходимые параметры подключения (имя узла, имя пользователя, пароль). Спецификация столбца в операторе CREATE TABLE состоит из имени столбца, типа (вид значений, которые столбец может содержать) и, возможно, кое-каких атрибутов столбца. В таблице president используется два типа столбцов. Это типы VARCHAR И DATE. Тип VARCHAR (n) подразумевает, что столбец содержит символьные (строковые) данные переменной длины при максимальной длине n каждый. Значение n выбирается в зависимости от того, какой максимальной длины ожидается значение столбца. Так, state объявлен как VARCHAR ( 2 ). Этого достаточно, если для хранения названия штата будет использоваться его традиционная двухбуквенная аббревиатура. Другие строковые столбцы должны быть длинней, чтобы вместить более длинные названия. Еще одним типом данных, которым мы здесь воспользовались, является тип DATE. Читателя может удивить то, что формат хранения данных начинается с года. Стандарт формата даты "YYYY-MM-DD" Ч это стандарт представления данных ANSI SQL. Единственный атрибут столбцов, которым мы воспользуемся в таблице president, Ч это атрибут NULL (значения данного столбца могут быть пустыми) и NOT NULL (значения данного столбца не могут быть пустыми). Большинство столбцов имеют атрибут NOT NULL. Это означает, что они всегда должны быть заполнены. Только два столбца могут иметь пустые значения Ч это s u f f i x (суффиксы большей частью в именах отсутствуют) и death (некоторые президенты живы, и дата смерти отсутствует). Оператор CREATE TABLE, предназначенный для создания таблицы member, имеет такой вид:

CREATE TABLE member ( last_name VARCHAR(20) NOT NOLL, first_name VARCHAR(20) NOT NULL, suffix VARCHAR(5) NULL, expiration DATE NULL DEFAULT " 0 0 0 - 0, Х 00-00" email VARCHAR(100) NULL, street VARCHAR(SO) NULL, Глава 1. Знакомство с СУБД MySQL и SQL 3- city VARCHAR(50) NULL, state VARCHAR(2) NULL, zip VARCHAR(IO) NULL, phone VARCHAR(20) NULL, interests VARCHAR(255) NULL Введите этот оператор из mysgl или запустите из оболочки следующую команду: % mysql samp_db < create_member.sql С точки зрения типов столбцов, таблица member не представляет особого интереса: все столбцы, за исключением одного столбца, заданы как строки переменной длины. Одно исключение Ч столбец expiration имеет тип DATE Его значение по умолчанию "0000-00-00". Оно означает, что дата введена не была. Сделано это потому, что expiration может иметь пустое значение, что свидетельствует о пожизненном членстве. Однако значением по умолчанию столбца, который может иметь пустое значение, есть пустое значение при условии, что другое значение по умолчанию не определено. Возникает ситуация, когда при создании записи для нового члена не вводится дата истечения срока полномочий, член получает пожизненное членство! Воспользовавшись значением по умолчанию "0000Ч00Ч00", мы решаем эту проблему. Это также позволит производить периодическую проверку на правильность ввода даты. Прошу обратить внимание на то, что я "забыл" задать столбец для хранения идентификационного номера членства Это было сделано преднамеренно для того, чтобы иметь возможность демонстрации работы оператора ALTER TABLE. Давайте убедимся, что нам удалось создать именно такую таблицу, какую мы хотели.

mysql> DESCRIBE president | Field 1 last name I first name I suffix 1 city I state I birth | death 1 Type I 1 1 1 1 1 1 Null | Key 1 1 1 1 1 YES | 1 1 1 1 1 1 I YES | ЧЧ ] default I !

Extra varchar (15) varchar (15) varchar (5) varchar (20) char(2) date date I NULL 1 1 10000-00-00 I NULL iЧ Для версии 3.23 результат работы этого оператора включает еще один столбец, содержащий информацию о правах доступа. Для простоты этот столбец включен. Все вроде-бы нормально, за исключением одного: столбец state имеет тип C H A R ( 2 ). Это странно. Разве он не был объявлен как VARCHAR(2)? Да, был, но СУБД MySQL по умолчанию изменила тип с VARCHAR на CHAR. Причина Ч проблема оптимизации области хранения Часть I. Использование СУБД MySQL данных, которой я здесь еще не касался. Более подробно это обсуждается в главе 3 "Синтаксис и использование языка SQL". А на этом этапе разница между двумя типами не играет роли. Введя оператор DESCRIBE member, читатель увидит аналогичную информацию ДЛЯ таблицы member. Оператор DESCRIBE полезен в тех случаях, когда пользователь забыл имя столбца или необходимо уточнить тип данных, размер столбца и т. п. Это также полезно для того, чтобы узнать порядок, в котором СУБД MySQL хранит столбцы в таблице Знать это очень важно при добавлении строк в таблицу и загрузке данных. Для операторов INSERT и LOAD DATA необходимо полное соответствие вводимых данных со структурой таблицы. Оператор DESCRIBE можно сократить до DESC или, если читатель предпочитает много печатать, он может ввести оператор SHOW COLUMNS FROM tbl_name, который является синонимом DESCRIBE tbl_name. А что делать, если читатель вообще забыл имена своих таблиц? Тогда воспользуйтесь оператором SHOW TABLES. Для базы данных samp_db листинг этого оператора будет иметь следующий вид.

mysql> SHOW TABLES;

I Tables_in_samp_db | +.

| member | president I | + На случай, если читатель забыл имя своей базы данных, имеется оператор SHOW DATABASES.

mysql> SHOW DATABASES;

-I -+ I Database I I I I ! menargie mysql samp_db test" + | I I + На каждом сервере список баз данных может варьироваться, но две из них должны присутствовать всегда. Это samp_db и mysql. Последняя база данных хранит таблицы, содержащие привилегии и права доступа Команды DESCRIBE и SHOW имеют также и эквиваленты в командной строке.

Pages:     | 1 | 2 | 3 | 4 | 5 |   ...   | 11 |    Книги, научные публикации