Дюбуа, Поль. Д95 MySQL : Пер. с англ. : Уч. пос. — М. : Издательский дом "Вильяме", 2001. — 816 с. : ил. — Парал. тит. англ. ISBN 5-8459-0158-8 (рус.) В книге описана одна из самых популярных реляционных систем управления базами данных MySQL. Вместо простого обзора возможностей MySQL, автор показывает, как можно максимально эффективно использовать эту СУБД. На примере двух тестовых баз данных он приводит рецепты решения проблем, с которыми вы обязательно столкнетесь при практическом использовании MySQL. Вы научитесь интегрировать MySQL с программными средствами, разработанными сторонними компаниями, такими как компиляторы языков РНР и Perl, которые позволяют с помощью запросов к базе данных создавать динамические Web-страницы. Кроме того, здесь приведен обширный справочник по типам столбцов, операторам, функциям, синтаксическим конструкциям языка SQL, интерфейсам С API, Peri DBI и PHP API. В книге предоставлена уникальная информация, которую вряд ли можно получить где-нибудь еще. Книга рассчитана на пользователей и разработчиков систем кли-: ент/сервер на основе MySQL.
Оглавление

ЧАСТЬ I. ИСПОЛЬЗОВАНИЕ СУБД MYSQL 37

Глава 1. Знакомство с СУБД MySQL и SQL 38

Глава 2. Работа с данными в MySQL 119

Глава 3. Синтаксис и использование языка SQL 185

Глава 4. Оптимизация запросов 227

ЧАСТЬ П. ПРОГРАММНЫЕ ИНТЕРФЕЙСЫ СУБД MYSQL 251

Глава 5. Введение в программирование в СУБД MySQL 252

Глава 6. Программный интерфейс MySQL С API 275

Глава 7. Программный интерфейс Perl API 333 Глава 8. Интерфейс API для языка написания сценариев РНР 412

ЧАСТЬ III. АДМИНИСТРИРОВАНИЕ MYSQL " 453

Глава 9. Введение в администрирование MySQL 454

Глава 10. Каталог данных MySQL 460

Глава 11. Общее администрирование MySQL 479

Глава 12. Безопасность 518

Глава 13. Поддержка и восстановление баз данных ,540

ЧАСТЫУ. ПРИЛОЖЕНИЯ 555 Приложение А. Получение и инсталляция программного

обеспечения 556

Приложение Б. Типы столбцов 576

Приложение В. Операторы и функции 586

Приложение Г. Синтаксис SQL ' 631

Приложение Д. Программы MySQL 668

Приложение Е. Программный интерфейс приложений С 707 Приложение Ж. Программный интерфейс DBI языка

написания сценариев Perl 741

Приложение 3. Программный интерфейс языка РНР 761

Приложение И. Утилиты независимых разработчиков 784

Приложение К. Провайдеры услуг Internet 787

Предметный указатель , 801

Содержание

Об авторе jy

О рецензентах 17

Предисловие j n

Благодарности 20

Ждем ваших отзывов! 21

Введение 22

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

Если вы уже работаете с другой СУБД 26

Инструментарий, поставляемый с MySQL 27

Можно ли получить MySQL бесплатно? 28

Для кого предназначена эта книга 30

Как написана эта книга 30

Часть I. Использование СУБД MySQL 30

Часть II. Программные интерфейсы СУБД MySQL 31

Часть III. Администрирование MySQL 31

Часть IV. Приложения 32

Как читать эту книгу 32

Версии программного обеспечения, которые упоминаются в этой

книге 34

Соглашения, используемые в этой книге 34

Дополнительные источники 35

ЧАСТЬ I. ИСПОЛЬЗОВАНИЕ СУБД MYSQL 37

Глава 1. Знакомство с СУБД MySQL и SQL 38

Назначение СУБД MySQL 39

Пример базы данных 43

"Историческая Лига" 44

Проект "Учет успеваемости" 47 Каким образом пример базы данных можно использовать в

конкретном случае 47

Основная терминология баз данных 48

Структурная терминология 48

Терминология языка запросов SQL 51

Терминология архитектуры СУБД MySQL 51

Учебный курс по СУБД MySQL 53

с

Предварительные требования 53.

ример тестовой базы данных 55

становка и завершение связи с сервером 55

вод запросов 57

оздание базы данных 59

Создание таблиц 61

Дополнение таблиц 77

Выборка информации 80

Удаление и модификация существующих записей 107

Модификация структуры таблиц 109

Как работать с mysql ПО

Упрощение процесса подключения ПО

Упрощение процесса создания запросов 113

Что дальше? 118

Глава 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 185

СУБД MySQL: преимущества и недостатки 186

Правила присвоения имен в СУБД MySQL 187

Ссылка на элементы баз данных 188

Чувствительность к регистру в операторах SQL 189

Создание, удаление и выборка баз данных 190

Оператор CREATE DATABASE 190

Оператор DROP DATABASE 191

Оператор USE 191

Создание, удаление, индексирование и изменение структуры

таблицы 192

Оператор CREATE TABLE 192

Оператор DROP TABLE 197 Создание и удаление индексов 198 Оператор ALTER TABLE 202 Получение информации о базах данных и таблицах 205 Выборка записей 206 Тривиальное объединение 208 Полное объединение 208 Левое объединение 210 Комментарии 211 Разные решения 212 Преобразование вложенных выборок в объединения 212 Проверка отсутствующих значений в таблице 214 Выполнение операции UNION 216 Добавление столбца с непрерывной последовательностью значений 217 Упорядочение или переупорядочение существующих столбцов 217 Сортировка в произвольном порядке 218 Таблица со счетчиком 218 Проверка таблицы на существование 219 Возможности, которые не поддерживает СУБД MySQL 220 Глава 4. Оптимизация запросов 227 Индексирование 228 Преимущества индексирования 228 Недостатки индексирования 231 Выбор индекса 232 Оптимизатор MySQL 234 Как работает оптимизатор 235 . Подавление оптимизации 238 Выбор типа столбцов и эффективность запросов 240 Эффективная загрузка данных 243 Проблемы планирования и блокировки 246 Оптимизация для администраторов 249 ~- ; Параметры сервера 249 Проблема аппаратной платформы 250

ЧАСТЬ II. ПРОГРАММНЫЕ ИНТЕРФЕЙСЫ СУБД MYSQL 251

Глава 5. Введение в программирование в СУБД MySQL 252

Интерфейсы API для СУБД MySQL 258

Интерфейс API для языка С 259

Интерфейс Perl DBI API 260

Интерфейс PHP API 263

Выбор API-интерфейса . 264

Среда выполнения 265

Производительность 266

Я

Глава 6. Программный интерфейс MySQL С API 275 Общая процедура создания клиентских программ 277 Основные требования к системе 277 Компилирование и редактирование связей клиентской программы 278 Client 1 подключение к серверу 279 Client2 добавление диагностики ошибок . 281 Client3 модульный стиль программирования 285 Client4 получение параметров соединения во время выполнения 292 Доступ к содержимому конфигурационного файла 293 Синтаксический анализ аргументов командной строки 296 Обработка запросов 305 Обработка запросов, не возвращающих результатов 306 Обработка запросов, возвращающих результаты 307 Обработка общих запросов 311 Альтернативные методы обработки запросов 313 Сравнение возможностей mysql_store_result() и mysql_use_result() 315 Метаданные результирующего запроса 317 Clients программа интерактивного ввода запросов , 322 Разное 323 Выполнение вычислений на основе данных, полученных в результирующем наборе 324 Кодирование проблемных данных в запросах 326 Обработка изображений 328 Получение информации из таблицы 329 Наиболее часто встречающиеся ошибки при программировании клиентских программ , 329

Глава 7. Программный интерфейс Perl API 333 Свойства сценариев языка Perl 334 Основы интерфейса базы данных Perl ' • 335 Типы данных интерфейса DBI 335 Простой DBI-сценарий 336 Обработка ошибок 341 Обработка запросов, не возвращающих результирующего набора данных 345 Обработка запросов, возвращающих результирующий набор данных 346 Подготовка интерфейса к работе 371 Генерация каталога общества "Историческая Лига" 372 Рассылка напоминаний об истечении срока членства 379 Редактирование записей о членах "Исторической Лиги" 384 Подбор членов "Исторической Лиги" по общности интересов 389 Размещение каталога "Исторической Лиги" на Web-узле 390

Работа с интерфейсом DBI в Web-приложениях 393

Настройка сервера Apache для работы с CGI-сценариями 394

Краткое знакомство с модулем CGI.pm 396

Подключение к серверу MySQL Server из Web-сценария 401

Броузер базы данных samp_db 403

Броузер проекта "Учета успеваемости'' 407 Подбор членов "Исторической Лиги" по общности научных

интересов 410

Глава 8. Интерфейс API для языка написания сценариев РНР 412

Характеристики сценария, написанного на языке РНР 413

Основы языка РНР 413

Работа с функциями и включаемыми файлами 420

Web-страница с простейшим запросом 425

Обработка результатов запроса 427

Обработка ошибок 432

Проблема кавычек 433

Работа с РНР 434

Ввод оценок учащихся 435

Викторина "Президенты США" 443

Интерактивное редактирование данных о членах

"Исторической Лиги" 446

ЧАСТЬ III. АДМИНИСТРИРОВАНИЕ MYSQL 453

Глава 9. Введение в администрирование MySQL 454

Обзор задач администрирования 455

Общее администрирование 456

Безопасность 458

Отладка и поддержка баз данных 459

Глава 10. Каталог данных MySQL 460

Размещение каталога данных 461

Структура каталога данных 463

Как обеспечивается доступ к данным сервера MySQL 463

Представление баз данных 465

Представление таблиц баз данных 466 Ограничения операционной системы на имена баз данных и

таблиц • 467 Влияние структуры каталога данных на производительность

системы 468

Файлы состояния MySQL 470

Перемещение содержимого каталога данных 473

Методы перемещения 474

Определение эффекта перемещения 475

Перемещение каталога данных 476

Перемещение баз данных 476

Перемещение таблиц баз данных 477

Перемещение файлов состояния 478

Глава 11. Общее администрирование MySQL 479 Защита новой инсталляции MySQL 480 Настройка процедур запуска и завершения работы сервера MySQL 482 Запуск сервера MySQL непривилегированным пользователем 482 Методы запуска сервера 485 Определение опций запуска 486' Завершение работы сервера 487 Когда нельзя подключиться к серверу 488 Управление пользовательскими учетными записями 490 Создание новых пользователей и предоставление привилегий 491 Отмена привилегий и удаление пользователей 497 Ведение файлов журналов , 499 Резервирование и копирование баз данных 503 Резервирование и копирование баз данных с помощью программы mysqldump 505 Использование методов прямого копирования 508 Репликация баз данных . 509 Восстановление данных из архивов 509 Восстановление базы данных 510 Восстановление отдельных таблиц 511 Настройка сервера 511 Запуск нескольких серверов 514 Инсталляция и настройка нескольких серверов 515 Процедуры запуска нескольких серверов 515 Обновление MySQL 516

Глава 12. Безопасность 518 Внутренняя безопасность: защита доступа к каталогу данных 519 Внешняя безопасность: защита сетевого доступа 522 Структура и содержимое таблиц разрешений MySQL 523 Как сервер управляет доступом клиентов 528 Проверка запроса 531 Порядок сравнения столбцов 533 Как минимизировать риск при работе с таблицами разрешений 534 Установка пользователей без помощи оператора GRANT 535

Глава 13. Поддержка и восстановление баз данных 540

Проверка и восстановление таблиц баз данных 541

Синтаксис утилит myisamchk и isamchk 542

Проверка таблиц 543

Восстановление таблиц 543

Как исключить возможность одновременного доступа к таблицам сервера MySQL и утилит 546 Ускорение работы утилит myisamchk и isamchk 549 Планирование превентивной поддержки 550 Периодическая проверка таблиц с помощью программы сгоп 552 Проверка таблиц во время загрузки системы 553

ЧАСТЬ IV. ПРИЛОЖЕНИЯ 555

Приложение А. Получение и инсталляция программного

обеспечения 556

Выбор компонентов для инсталляции 557

Получение программного обеспечения 558

Выбор инсталлируемой версии 558

Инсталляция MySQL в системе UNIX 560

Еще об инсталляций MySQL 561

Создание учетной записи для пользователя MySQL 561

Получение и инсталляция дистрибуции MySQL 562

Инициализация каталога данных и таблиц разрешений 566

Запуск сервера 567

Инсталляция поддержки Perl DBI 567

Инсталляция РНР и Apache 569

Инсталляция MySQL в Windows 571 Инсталляция дистрибуции клиентской программы или клиент/сервера 572 Инсталляция MyODBC 573 Инсталляция поддержки Perl DBI 574 Инсталляция РНР и Apache 575

Получение и инсталляция дистрибуции базы данных samp_db 575

Приложение Б. Типы столбцов 576

Числовые типы 577

Строковые типы 580

Типы даты и времени 583

Приложение В. Операторы и функции 586

Операторы 588

Приоритет операторов ' 588

Операторы группировки 588

Арифметические операторы 589

Операторы сравнения 590

Битовые операторы 594

Логические операторы 595

Операторы преобразования 596

Операторы сравнения с образцом 596

Функции 600

Функции сравнения 600 !

j

Числовые функции 602

Строковые функции 607

Функции даты и времени 615

Суммирующие функции 624 Другие функции • 625

Приложение Г. Синтаксис SQL 631

Операторы SQL 632

ALTER TABLE 632

CREATE DATABASE 634

CREATE FUNCTION 634

CREATE INDEX 635

CREATE TABLE 635

DELETE 639

DESCRIBE 640

DROP DATABASE 640

DROP FUNCTION 641

DROP INDEX 641

DROP TABLE 641

EXPLAIN 641

FLUSH 642

Оператор GRANT 642

INSERT 645

KILL 646

LOAD DATA 647

LOCK TABLES 651

OPTIMIZE TABLE 651

REPLACE 652

REVOKE 652

SELECT 653

SET 656

SHOW 659

UNLOCK TABLES 664

UPDATE 665

USE 665

Синтаксис комментариев 665

Приложение Д. Программы MySQL 668

Определение программных опций 669

Стандартные опции программы MySQL 670

Конфигурационные файлы 672

Переменные среды 675

Утилиты isamchk и myisamchk 676

Использование 677

Стандартные опции, поддерживаемые утилитами isamchk и

myisanchk 678

Общие опции утилит isamchk и myisamchk 678

Специальные опции утилиты myisamchk 680

Переменные утилит isamchk и myisamchk 681

Утилиты myisampack и pack_isam 681

Использование 682 Стандартные опции, поддерживаемые утилитами myisampack

и packjsam 682

Общие опции утилит myisampack и pack_isam 682

Специальные опции pack_isam 683

Утилита mysql 683

Использование ' 685

Стандартные опции, поддерживаемые программой mysql 685

Специальные опции mysql 685

Переменные mysql 687

Команды mysql 687

Сценарий mysql.server 688

Использование 688

Сценарий mysqlaccess 689

Использование 689 Стандартные опции, поддерживаемые сценарием mysqlaccess 689

Специальные опции mysqlaccess 689

Программа mysqladmin 690

Использование 690

Стандартные опции, поддерживаемые утилитой mysqladmin 690

Специальные опции mysqadmin 690

Команды mysqladmin 691

Программа mysqlbug 693

Использование 693

Программа mysqld 693

Использование 694

Стандартные опции, поддерживаемые программой mysqld 694

Специальные опции mysqld 694

Переменные mysqld 698

Программа mysqldump 700

Использование 700 Стандартные опции, поддерживаемые программой mysqldump 701

Специальные опции mysqldump 701

Опции форматирования данных 702

Переменные mysqldump 703

Программа mysqlimport 703

Использование 703

Стандартные опции, поддерживаемые утилитой mysqlimport 704

Специальные опции mysqlimport 704

. Опции форматирования данных 704

Программа mysqlshow 705

Использование 705 Стандартные опции, поддерживаемые программой mysqlshow 706

Специальные опции mysqlshow 706

Программа safe_mysqld • 706

Использование 706

Приложение Е. Программный интерфейс приложений С 707

Компилирование и редактирование связей 708

Типы данных программного интерфейса приложений С 708

Скалярные типы данных 709

Нескалярные типы данных 709

Макросы доступа 714

Функции программного интерфейса приложений С 714

Функции управления соединением 715

Функции состояния и диагностики ошибок 721

Функции создания и выполнения запросов 721

Функции обработки результирующих наборов 724

Информационные функции 734

Административные функции 736

Функции отладки 737

Исключенные функции 737

Приложение Ж. Программный интерфейс DBI языка

написания сценариев Perl 741

Написание сценариев 742

Методы интерфейса DBI 742

Методы класса DBI 744

Методы дескрипторов баз данных 747

Методы дескрипторов операторов 749

Методы общих дескрипторов 752

Специальные административные методы MySQL 753

Функции утилит интерфейса DBI 754

Атрибуты интерфейса DBI . 755

Общие атрибуты дескрипторов 755

Динамические атрибуты 756

Специальные атрибуты дескрипторов баз данных MySQL 756

Атрибуты дескрипторов операторов 757

Специальные атрибуты дескрипторов операторбв MySQL 758

Переменные среды интерфейса DBI 760

Приложение 3. Программный интерфейс языка РНР 761

Написание сценариев РНР 762

Функции 763

Программы управления соединением ' 764

Программы состояния и диагностики ошибок 765

Программы построения и выполнения запросов 767

Программы обработки результирующих наборов 770

Программы баз данных 782

Предисловие Г

Когда мне предложили рецензировать книгу Пола, я даже не предполагал, что мне еще придется писать и предисловие. Я всегда придерживался мнения, что программисту нельзя писать книги, даже если это книги для программистов.

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

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

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

Михаэль Видениус

Гельсингфорс (Helsinefors). 1999 г.




Hosted by uCoz