Предисловие | 15 |
|
1. Работа с клиентской программой mysql | 28 |
|
1.1. Создание учётной записи пользователя MySQL | 29 |
1.2. Создание базы данных и тестовой таблицы | 31 |
1.3. Запуск и остановка mysql | 32 |
1.4. Задание параметров соединения в файлах опций | 34 |
1.5. Защита файлов опций | 37 |
1.6. Комбинирование параметров файла опций с параметрами |
командной строки | 37 |
1.7. Что делать, если не удаётся найти mysql | 38 |
1.8. Установка переменных окружения | 39 |
1.9. Создание запросов | 42 |
1.10. Выбор базы данных | 43 |
1.11. Отмена частично введённого запроса | 44 |
1.12. Повторение и редактирование запросов | 45 |
1.13. Автоматическое завершение ввода имён баз данных и таблиц | 47 |
1.14. Использование в запросах переменных SQL | 48 |
1.15. Чтение запросов из файла | 51 |
1.16. Чтение запросов из других программ | 53 |
1.17. Ввод запросов в командной строке | 54 |
1.18. Использование копирования и вставки для формирования ввода |
mysql | 55 |
1.19. Борьба с исчезновением с экрана вывода запроса | 56 |
1.20. Перенаправление вывода запроса в файл или программу | 57 |
1.21. Выбор формата вывода: таблица или элементы, разделённые |
табуляцией | 59 |
1.22. Задание произвольного разделителя для столбцов вывода | 59 |
1.23. Формирование HTML-вывода | 61 |
1.24. Формирование XML-вывода | 62 |
1.25. Исключение заголовков столбцов из вывода запроса | 63 |
1.26. Нумерация строк вывода запроса | 64 |
1.27. Улучшение читаемости длинных строк | 65 |
1.28. Управление уровнем подробности mysql | 67 |
1.29. Протоколирование интерактивных сеансов mysql | 67 |
1.30. Создание сценариев mysql из ранее выполненных запросов | 68 |
1.31. Использование mysql в качестве калькулятора | 69 |
1.32. Использование mysql в сценариях оболочки | 71 |
|
2. Создание программы для MySQL | 77 |
|
2.1. Соединение с сервером MySQL, выбор базы данных и отключение | 82 |
2.2. Контроль ошибок | 96 |
2.3. Создание библиотечных файлов | 104 |
2.4. Запуск запросов и извлечение результатов | 116 |
2.5. Перемещение по результирующему множеству | 133 |
2.6. Использование в запросах подготовленных предложений |
и заполнителей | 134 |
2.7. Использование в запросах специальных символов и значений NULL | 140 |
2.8. Обработка значений NULL в результирующих множествах | 148 |
2.9. Создание объектно-ориентированного интерфейса MySQL для PHP | 152 |
2.10. Способы получения параметров соединения | 167 |
2.11. Заключение и рекомендации | 183 |
|
3. Выбор записей | 184 |
|
3.1. Задание столбцов вывода | 186 |
3.2. Решение проблем с неправильным порядком вывода столбцов | 187 |
3.3. Присваивание имён столбцам вывода | 188 |
3.4. Использование псевдонимов столбцов в программах | 191 |
3.5. Объединение столбцов для формирования составных значений | 192 |
3.6. Задание выбираемых строк | 193 |
3.7. Инструкция WHERE и псевдонимы столбцов | 197 |
3.8. Отображение результатов операций сравнения с целью контроля |
их выполнения | 197 |
3.9. Инвертирование, или отрицание условий запроса | 198 |
3.10. Удаление повторяющихся строк | 200 |
3.11. Обработка значений NULL | 202 |
3.12. Инвертирование условия для столбца, содержащего значения NULL | 203 |
3.13. Использование в программах операций сравнения с участием NULL | 204 |
3.14. Сопоставление значениям NULL других значений при выводе | 205 |
3.15. Упорядочивание результирующего множества | 207 |
3.16. Выбор начальных или конечных записей результирующего множества | 208 |
3.17. Выбор строк из середины результирующего множества | 211 |
3.18. Выбор соответствующих значений для инструкции LIMIT | 213 |
3.19. Получение значений LIMIT из выражений | 215 |
3.20. Что делать, если для инструкции LIMIT нужен «неправильный» |
порядок сортировки | 216 |
3.21. Выбор результирующего множества в существующую таблицу | 218 |
3.22. Создание таблицы из результирующего множества «на лету» | 219 |
3.23. Безопасное перемещение записей из таблицы в таблицу | 221 |
3.24. Создание временных таблиц | 223 |
3.25. Клонирование таблицы | 225 |
3.26. Формирование уникальных имён таблиц | 227 |
|
4. Работа со строками | 229 |
|
4.1. Создание строк, содержащих кавычки или другие специальные |
символы | 230 |
4.2. Сохранение замыкающих пробелов в строковых столбцах | 232 |
4.3. Проверка равенства и взаимного порядка строк | 233 |
4.4. Разбиение и соединение строк | 234 |
4.5. Проверка вхождения подстроки в строку | 238 |
4.6. Поиск по образцу с помощью шаблонов SQL | 238 |
4.7. Поиск по образцу с помощью регулярных выражений | 241 |
4.8. Буквальная интерпретация метасимволов в шаблонах | 246 |
4.9. Управление чувствительностью к регистру при сравнении строк | 249 |
4.10. Управление чувствительностью к регистру при поиске по образцу | 253 |
4.11. Поиск с помощью индекса FULLTEXT | 256 |
4.12. FULLTEXT-поиск и короткие слова | 261 |
4.13. Включение и исключение слов из FULLTEXT-поиска | 262 |
4.14. Поиск фразы при помощи индекса FULLTEXT | 264 |
|
5. Работа с датами и временем | 267 |
|
5.1. Изменение формата даты MySQL | 270 |
5.2. Определение форматов отображения даты и времени | 271 |
5.3. Определение текущей даты или времени | 273 |
5.4. Разбиение дат и времени на части с помощью функций |
форматирования | 274 |
5.5. Разбиение дат и времени с помощью функций извлечения |
составляющих | 276 |
5.6. Разбиение дат и времени с помощью строковых функций | 279 |
5.7. Синтез дат и времени с помощью функций форматирования | 280 |
5.8. Синтез дат и времени с помощью функций извлечения составляющих | 281 |
5.9. Объединение даты и времени в значение дата-и-время | 283 |
5.10. Преобразование времени в секунды и обратно | 283 |
5.11. Преобразование дат в дни и обратно | 285 |
5.12. Преобразование значений дата-и-время в секунды и обратно | 286 |
5.13. Сложение значений времени | 288 |
5.14. Вычисление интервалов между значениями времени | 289 |
5.15. Разбиение интервалов времени на составляющие | 290 |
5.16. Добавление значения времени к дате | 292 |
5.17. Вычисление интервалов между датами | 295 |
5.18. Стандартизация не-совсем-ISO-строк | 297 |
5.19. Вычисление возраста | 299 |
5.20. Смещение даты на заданную величину | 302 |
5.21. Нахождение первого и последнего дней месяца | 304 |
5.22. Вычисление длины месяца | 307 |
5.23. Получение одной даты из другой заменой подстроки | 308 |
5.24. Определение дня недели для даты | 309 |
5.25. Определение дат для дней текущей недели | 310 |
5.26. Определение дат для дней других недель | 311 |
5.27. Вычисления для високосных годов | 313 |
5.28. Обработка даты и времени как чисел | 317 |
5.29. Обработка в MySQL строк как значений времени | 318 |
5.30. Выбор записей по временным характеристикам | 319 |
5.31. Использование значений TIMESTAMP | 323 |
5.32. Регистрация времени последнего изменения строки | 324 |
5.33. Регистрация времени создания записи | 325 |
5.34. Вычисления со значениями TIMESTAMP | 327 |
5.35. Вывод значений TIMESTAMP в удобном для чтения виде | 328 |
|
6. Сортировка результатов запроса | 329 |
|
6.1. Использование ORDER BY для сортировки результатов запроса | 330 |
6.2. Сортировка частей таблицы | 335 |
6.3. Сортировка результатов выражения | 336 |
6.4. Сортировка одного набора значений и вывод другого | 338 |
6.5. Сортировка и значения NULL | 343 |
6.6. Сортировка и чувствительность к регистру | 345 |
6.7. Сортировка по дате | 347 |
6.8. Сортировка по календарному дню | 348 |
6.9. Сортировка по дню недели | 351 |
6.10. Сортировка по времени дня | 353 |
6.11. Сортировка по подстрокам значений столбцов | 354 |
6.12. Сортировка по подстрокам фиксированной длины | 354 |
6.13. Сортировка по подстрокам переменной длины | 357 |
6.14. Сортировка имён хостов по доменам | 362 |
6.15. Сортировка IP-адресов в числовом порядке | 365 |
6.16. Размещение определённых значений в начале или конце |
упорядоченного списка | 367 |
6.17. Сортировка в порядке, определённом пользователем | 369 |
6.18. Сортировка значений ENUM | 370 |
|
7. Формирование итогов | 374 |
|
7.1. Суммирование с помощью функции COUNT() | 376 |
7.2. Суммирование при помощи функций MIN() и MAX() | 379 |
7.3. Суммирование при помощи функций SUM() и AVG() | 380 |
7.4. Использование ключевого слова DISTINCT для удаления дубликатов | 382 |
7.5. Поиск значений, связанных с минимальным и максимальным |
значениями | 385 |
7.6. Управление чувствительностью к регистру функций MIN() и MAX() | 389 |
7.7. Разбиение итогов на подгруппы | 390 |
7.8. Итоги и значения NULL | 395 |
7.9. Выбор групп только с определёнными характеристиками | 398 |
7.10. Устанавливаем уникальность значения | 399 |
7.11. Группирование по результатам выражения | 400 |
7.12. Классификация некатегориальных данных | 402 |
7.13. Управление порядком вывода итоговой информации | 406 |
7.14. Нахождение наибольшего и наименьшего из итоговых значений | 408 |
7.15. Итоги по датам | 409 |
7.16. Одновременная работа с итогами по группам и общим итогом | 413 |
7.17. Формирование отчёта, содержащего итоговую информацию и список | 416 |
|
8. Изменение таблицы с помощью предложения ALTER TABLE | 419 |
|
8.1. Удаление, добавление и перемещение столбца | 421 |
8.2. Изменение определения или имени столбца | 422 |
8.3. Предложение ALTER TABLE, значения NULL и значения по умолчанию | 424 |
8.4. Изменение значения столбца по умолчанию | 426 |
8.5. Изменение типа таблицы | 427 |
8.6. Переименование таблицы | 428 |
8.7. Добавление и удаление индексов | 429 |
8.8. Удаление дубликатов путём добавления индекса | 432 |
8.9. Использование предложения ALTER TABLE для нормализации таблицы | 434 |
|
9. Получение и использование метаданных | 440 |
|
9.1. Определение количества строк, обработанных запросом | 441 |
9.2. Получение метаданных результирующего множества | 443 |
9.3. Определение наличия или отсутствия результирующего множества | 452 |
9.4. Форматирование результатов запроса для отображения | 453 |
9.5. Получение информации о структуре таблицы | 457 |
9.6. Получение информации о столбцах ENUM и SET | 465 |
9.7. Способы получения информации о таблицах, не зависящие от СУБД | 467 |
9.8. Применение информации о структуре таблицы | 469 |
9.9. Вывод списков таблиц и баз данных | 476 |
9.10. Проверка существования таблицы | 478 |
9.11. Проверка существования базы данных | 479 |
9.12. Получение метаданных сервера | 479 |
9.13. Создание приложений, адаптирующихся к версии сервера MySQL | 480 |
9.14. Определение текущей базы данных | 482 |
9.15. Определение текущего пользователя MySQL | 482 |
9.16. Мониторинг сервера MySQL | 484 |
9.17. Определение типов таблиц, поддерживаемых сервером | 485 |
|
10. Импорт и экспорт данных | 488 |
|
10.1. Импорт с помощью LOAD DATA и утилиты mysqlimport | 493 |
10.2. Определение местоположения файла данных | 494 |
10.3. Указание формата файла данных | 497 |
10.4. Использование кавычек и специальных символов | 498 |
10.5. Импорт файлов в формате CSV | 499 |
10.6. Чтение файлов, полученных из разных операционных систем | 500 |
10.7. Обработка дубликатов индексированных записей | 501 |
10.8. Расширение диагностики в LOAD DATA | 501 |
10.9. Не преувеличивайте возможности LOAD DATA | 502 |
10.10. Пропуск строк в файле данных | 504 |
10.11. Определение порядка ввода столбцов | 504 |
10.12. Пропуск столбцов файла данных | 505 |
10.13. Экспорт результатов запроса из MySQL | 506 |
10.14. Экспорт таблиц в виде необработанных данных | 509 |
10.15. Экспорт содержимого таблиц или определений в SQL-формат | 510 |
10.16. Копирование таблиц и баз данных на другой сервер | 512 |
10.17. Создание собственных программ экспорта | 513 |
10.18. Преобразование файлов данных из одного формата в другой | 518 |
10.19. Извлечение и перестановка столбцов файлов данных | 520 |
10.20. Проверка корректности и преобразование данных | 524 |
10.21. Проверка корректности. Прямое сравнение | 526 |
10.22. Проверка корректности. Сравнение с образцом | 527 |
10.23. Образцы для широкой классификации | 530 |
10.24. Образцы для числовых значений | 531 |
10.25. Образцы для дат и времени | 533 |
10.26. Образцы для адресов электронной почты и URL | 537 |
10.27. Проверка корректности при помощи метаданных таблицы | 538 |
10.28. Проверка корректности при помощи справочной таблицы | 542 |
10.29. Преобразование двузначных значений года в четырёхзначные | 545 |
10.30. Проверка корректности составляющих даты и времени | 546 |
10.31. Создание утилит для обработки дат | 549 |
10.32. Использование дат с недостающими частями | 554 |
10.33. Преобразование дат при помощи SQL | 555 |
10.34. Использование временных таблиц для преобразования дат | 557 |
10.35. Обработка значений NULL | 560 |
10.36. Определение структуры таблицы для файла данных | 563 |
10.37. Диагностическая утилита для LOAD DATA | 568 |
10.38. Обмен данными между MySQL и Microsoft Access | 574 |
10.39. Обмен данными между MySQL и Microsoft Excel | 575 |
10.40. Обмен данными между MySQL и FileMaker Pro | 577 |
10.41. Экспорт результатов запроса в XML | 579 |
10.42. Импорт XML в MySQL | 582 |
10.43. Эпилог | 585 |
|
11. Формирование и использование последовательностей | 587 |
|
11.1. Использование AUTO_INCREMENT для создания столбца |
последовательности | 589 |
11.2. Генерирование значений последовательности | 590 |
11.3. Выбор типа для столбца последовательности | 592 |
11.4. Удаление записей и формирование последовательности | 595 |
11.5. Извлечение значений последовательности | 598 |
11.6. Стоит ли повторно упорядочивать столбец | 602 |
11.7. Расширение диапазона последовательности | 603 |
11.8. Перенумерация существующей последовательности | 604 |
11.9. Повторное использование последних значений последовательности | 606 |
11.10. Управление изменением нумерации строк | 607 |
11.11. Как начать последовательность с определённого значения | 608 |
11.12. Добавление последовательности в существующую таблицу | 610 |
11.13. Создание последовательностей с помощью столбца AUTO_INCREMENT | 611 |
11.14. Управление несколькими столбцами AUTO_INCREMENT одновременно | 616 |
11.15. Использование значений AUTO_INCREMENT для связывания таблиц | 618 |
11.16. Генераторы однострочных последовательностей | 621 |
11.17. Формирование повторяющихся последовательностей | 625 |
11.18. Последовательная нумерация строк вывода запроса | 626 |
|
12. Использование нескольких таблиц | 628 |
|
12.1. Соединение строк одной таблицы со строками другой | 628 |
12.2. Соединение таблиц разных баз данных | 633 |
12.3. Ссылка на имена столбцов вывода соединения в программе | 634 |
12.4. Нахождение строк одной таблицы, соответствующих строкам другой | 636 |
12.5. Нахождение строк, которым не соответствуют никакие строки |
другой таблицы | 641 |
12.6. Нахождение строк с минимальным и максимальным значениями |
в группе | 647 |
12.7. Вычисление рейтинга команд | 650 |
12.8. Вывод списков для записей «главная-подчинённая» и итогов | 656 |
12.9. Заполнение пустых мест в списке с помощью соединения | 660 |
12.10. Отношение «многие-ко-многим» | 665 |
12.11. Сравнение таблицы с самой собой | 670 |
12.12. Вычисление разности между последовательными строками | 678 |
12.13. Нарастающий итог и скользящее среднее | 680 |
12.14. Управление порядком вывода запроса с помощью соединения | 685 |
12.15. Преобразование подзапросов в операции соединения | 687 |
12.16. Параллельный выбор записей из нескольких таблиц | 692 |
12.17. Вставка записей в таблицу, включающую значения из другой | 697 |
12.18. Обновление одной таблицы на основе значений другой | 698 |
12.19. Создание справочной таблицы с помощью соединения | 702 |
12.20. Удаление связанных строк в нескольких таблицах | 708 |
12.21. Выявление и удаление несвязанных записей | 718 |
12.22. Одновременное использование нескольких серверов MySQL | 724 |
|
13. Статистические методы | 727 |
|
13.1. Получение описательных статистических показателей | 728 |
13.2. Групповые описательные статистические показатели | 732 |
13.3. Получение частотного распределения | 734 |
13.4. Подсчёт отсутствующих значений | 737 |
13.5. Вычисление линейной регрессии и коэффициентов корреляции | 739 |
13.6. Генерация случайных чисел | 742 |
13.7. Рандомизация набора строк | 743 |
13.8. Случайный выбор из набора строк | 748 |
13.9. Присваивание рангов | 749 |
|
14. Обработка повторяющихся записей | 753 |
|
14.1. Предотвращение появления дубликатов в таблице | 755 |
14.2. Обработка дубликатов на этапе создания записи | 757 |
14.3. Подсчёт и выявление дубликатов | 759 |
14.4. Устранение дубликатов из результата запроса | 763 |
14.5. Устранение дубликатов из результата самообъединения | 765 |
14.6. Удаление дубликатов из таблицы | 767 |
|
15. Выполнение транзакций | 774 |
|
15.1. Проверка поддержки транзакций | 775 |
15.2. Выполнение транзакций средствами SQL | 778 |
15.3. Выполнение транзакций в программах | 780 |
15.4. Использование транзакций в программах на Perl | 782 |
15.5. Использование транзакций в программах на PHP | 785 |
15.6. Использование транзакций в программах на Python | 786 |
15.7. Использование транзакций в программах на Java | 787 |
15.8. Альтернативы транзакциям | . 787 |
|
16. Знакомство с MySQL для Web | 791 |
|
16.1. Основы формирования веб-страницы | 794 |
16.2. Запуск веб-сценариев на сервере Apache | 797 |
16.3. Запуск веб-сценариев на сервере Tomcat | 807 |
16.4. Кодирование специальных символов для Web | 817 |
|
17. Внедрение результатов запросов в веб-страницы | 825 |
|
17.1. Представление результатов запроса в виде абзацев | 826 |
17.2. Представление результатов запроса в виде списков | 828 |
17.3. Представление результатов запроса в виде таблиц | .841 |
17.4. Представление результатов запроса в виде гиперссылок | 846 |
17.5. Создание навигационного индекса | 850 |
17.6. Хранение изображений и других двоичных данных | 855 |
17.7. Извлечение изображений и других двоичных данных | 863 |
17.8. Работа с баннерами | 865 |
17.9. Использование результатов запроса для загрузки файлов | 868 |
|
18. Обработка ввода через Web с помощью MySQL | 871 |
|
18.1. Создание форм в сценариях | 874 |
18.2. Создание элементов формы с возможностью выбора одного значения | 877 |
18.3. Создание элементов формы с возможностью выбора нескольких |
значений | 894 |
18.4. Загрузка в форму записи базы данных | 899 |
18.5. Получение входных данных через Web | 904 |
18.6. Проверка корректности ввода через Web | 915 |
18.7. Использование ввода через Web для формирования запросов | 916 |
18.8. Обработка загружаемых файлов | 919 |
18.9. Выполнение поиска и получение результатов | 927 |
18.10. Формирование ссылок на предыдущую и следующую страницы | 929 |
18.11. Сортировка результатов запроса по произвольному столбцу | 934 |
18.12. Счётчики посещаемости веб-страниц | 939 |
18.13. Журнал доступа к веб-странице | 944 |
18.14. Ведение журнала Apache с помощью MySQL | 945 |
|
19. Управление веб-сеансами с помощью MySQL | 954 |
|
19.1. Хранение сеансов в MySQL: приложения на Perl | 958 |
19.2. Хранение сеансов в MySQL: менеджер сеансов PHP | 964 |
19.3. Хранение сеансов в MySQL: Tomcat | 976 |
|
A. Получение программного обеспечения MySQL | 986 |
|
B. JSP и Tomcat для начинающих | 991 |
|
C. Справочная информация | 1020 |
|
Алфавитный указатель | 1023 |