
Рассмотрены готовые рецепты для решения практических задач при работе с СУБД MySQL. Описаны базовые принципы установки соединения с сервером MySQL, получения данных с сервера, выполнения и обработки запросов. Рассказывается о способах сохранять, извлекать и изменять строки, работать с датой и временем, приведены примеры сортировки результатов запросов и создания сводок. Рассматриваются способы оценки характеристик набора данных, создания хранимых функций и процедур. Приведены практические примеры использования хранимых подпрограмм, триггеров и запланированных событий. Отдельное внимание уделено основам мониторинга и приемам администрирования MySQL.
Для программистов, разработчиков и администраторов баз данных
Решения для разработчиков и администраторов
Популярность MySQL неизбежно вызывает вопросы у пользователей: они хотят знать, как решать конкретные задачи, связанные с данными. Вот тут-то и пригодится этот сборник рецептов.
Если вам нужны быстрые решения, в этой книге вы найдете десятки коротких, практичных фрагментов кода, сотни рабочих примеров и четкие, лаконичные объяснения для программистов и администраторов, у которых нет времени разбираться в особенностях MySQL с нуля.
В обновленном четвертом издании книги авторы предлагают более 200 рецептов, раскрывающих мощные возможности MySQL. Начинающие и профессиональные разработчики баз данных и веб-сайтов смогут погрузиться в такие темы, как MySQL Shell, репликация MySQL и работа с JSON.
Вы научитесь:
- Соединяться с сервером, выполнять запросы и обрабатывать результаты
- Получать данные с сервера MySQL
- Сохранять, извлекать и изменять строки
- Работать с датами и временем
- Сортировать результаты запросов и создавать сводки
- Оценивать характеристики набора данных
- Создавать хранимые функции и процедуры
- Использовать хранимые подпрограммы, триггеры и запланированные события
- Выполнять основные задачи по администрированию MySQL
- Понимать основы мониторинга MySQL
Будь то простые вопросы о соединении с сервером MySQL или сложные проблемы, связанные с выбором правильной топологии репликации, эта книга придет вам на помощь. Света и Алкин делятся своим более чем десятилетним опытом, помогая сотням пользователей MySQL решать ежедневные задачи.
Хенрик Инго, руководитель отдела проектирования и разработки, компания DataStax
Книгу “MySQL. Сборник рецептов. 4-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Отзывы………………………………………………………………………………………………….. 14
Вступительное слово………………………………………………………………………………. 15
Предисловие…………………………………………………………………………………………… 16
Для кого эта книга……………………………………………………………………………………………………………………… 18
Как построена эта книга…………………………………………………………………………………………………………… 18
Программные интерфейсы для MySQL, используемые в данной книге………………………………… 22
Примечания по версиям и платформам……………………………………………………………………………………. 22
Соглашения, принятые в этой книге…………………………………………………………………………………………. 23
Репозиторий GitHub…………………………………………………………………………………………………………………… 25
Получение MySQL и сопутствующего программного обеспечения……………………………………… 26
Использование примеров кода…………………………………………………………………………………………………. 28
Онлайн-обучение от издательской компании O’Reilly……………………………………………………………. 29
Как с нами связаться………………………………………………………………………………………………………………….. 29
Благодарности…………………………………………………………………………………………………………………………… 30
Глава 1. Работа с клиентской программой mysql……………………………………. 32
1.0. Введение………………………………………………………………………………………………………………………………. 32
1.1. Создание учетной записи пользователя MySQL……………………………………………………………… 33
1.2. Создание базы данных и тестовой таблицы…………………………………………………………………….. 36
1.3. Как найти клиент MySQL…………………………………………………………………………………………………… 37
1.4. Задание параметров команды для mysql………………………………………………………………………….. 39
1.5. Выполнение инструкций SQL в интерактивном режиме…………………………………………………. 44
1.6. Чтение запросов из файла или из программы…………………………………………………………………… 46
1.7. Управление направлением и форматом вывода mysql…………………………………………………….. 48
1.8. Использование в SQL-запросах переменных, определяемых пользователем……………….. 53
1.9. Настройка приглашения на ввод в mysql………………………………………………………………………….. 56
1.10. Использование внешних программ…………………………………………………………………………………. 58
1.11. Фильтрация и обработка вывода…………………………………………………………………………………….. 59
Глава 2. Работа с MySQL Shell……………………………………………………………….. 63
2.0. Введение………………………………………………………………………………………………………………………………. 63
2.1. Соединение с сервером MySQL при помощи MySQL Shell……………………………………………… 64
2.2. Выбор протокола………………………………………………………………………………………………………………… 67
2.3. Выбор режимов SQL, JavaScript или Python…………………………………………………………………….. 70
2.4. Выполнение сессий SQL…………………………………………………………………………………………………….. 70
2.5. Выполнение запросов SQL в режиме JavaScript………………………………………………………………. 71
2.6. Выполнение запросов SQL в режиме Python……………………………………………………………………. 74
2.7. Работа с таблицами в режиме JavaScript………………………………………………………………………….. 76
2.8. Работа с таблицами в режиме Python……………………………………………………………………………….. 78
2.9. Работа с коллекциями в режиме JavaScript………………………………………………………………………. 81
2.10. Работа с коллекциями в режиме Python………………………………………………………………………….. 84
2.11. Управление форматом вывода………………………………………………………………………………………… 86
2.12. Формирование отчетов с помощью MySQL Shell…………………………………………………………… 90
2.13. Работа с утилитами MySQL Shell……………………………………………………………………………………. 93
2.14. Использование Admin API для автоматизации управления репликацией…………………… 96
2.15. Работа с объектами JavaScript…………………………………………………………………………………………. 98
2.16. Заполнение базы данных тестовыми данными с помощью модулей Python
для Data Science………………………………………………………………………………………………………………. 102
2.17. Повторное использование сценариев для MySQL Shell………………………………………………. 112
Глава 3. Репликация MySQL………………………………………………………………… 115
3.0. Введение…………………………………………………………………………………………………………………………….. 115
3.1. Настройка базовой репликации между одним источником и одной репликой…………… 117
3.2. Репликация на основе позиции в новой среде………………………………………………………………… 118
3.3. Настройка репликации на основе позиции в активной среде………………………………………. 119
3.4. Настройка репликации на основе GTID…………………………………………………………………………. 121
3.5. Настройка формата бинарного журнала……………………………………………………………………….. 125
3.6. Использование фильтров репликации…………………………………………………………………………….. 126
3.7. Перезапись базы данных на реплике………………………………………………………………………………. 132
3.8. Параллельное выполнение событий (многопоточная реплика)…………………………………… 133
3.9. Настройка кольцевой репликации………………………………………………………………………………….. 135
3.10. Репликация из нескольких источников…………………………………………………………………………. 137
3.11. Использование подключаемого модуля полусинхронной репликации…………………….. 141
3.12. Использование групповой репликации…………………………………………………………………………. 144
3.13. Безопасное хранение учетных данных репликации……………………………………………………. 149
3.14. Использование TLS (SSL) для репликации…………………………………………………………………… 150
3.15. Устранение неполадок при репликации……………………………………………………………………….. 152
3.16. Использование списка процессов для понимания производительности
репликации………………………………………………………………………………………………………………………. 166
3.17. Настройка автоматической репликации………………………………………………………………………. 171
Глава 4. Создание программ для MySQL……………………………………………… 178
4.0. Введение…………………………………………………………………………………………………………………………….. 178
4.1. Соединение с сервером MySQL, выбор базы данных и отключение…………………………… 182
4.2. Обработка ошибок……………………………………………………………………………………………………………. 196
4.3. Создание библиотечных файлов…………………………………………………………………………………….. 205
4.4. Выполнение запросов и извлечение результатов………………………………………………………….. 219
4.5. Использование в запросах специальных символов и значений NULL…………………………. 234
4.6. Обработка специальных символов в идентификаторах……………………………………………….. 242
4.7. Обработка значений NULL в результирующих множествах………………………………………… 244
4.8. Способы получения параметров соединения………………………………………………………………… 250
4.9. Возвращение таблицы profile в исходное состояние…………………………………………………….. 259
Глава 5. Выбор записей………………………………………………………………………… 261
5.0. Введение…………………………………………………………………………………………………………………………….. 261
5.1. Задание столбцов и строк вывода…………………………………………………………………………………… 262
5.2. Присваивание имен столбцам вывода…………………………………………………………………………….. 264
5.3. Упорядочивание результирующего множества…………………………………………………………….. 268
5.4. Удаление повторяющихся строк……………………………………………………………………………………… 269
5.5. Обработка значений NULL………………………………………………………………………………………………. 270
5.6. Использование в программах операций сравнения с участием NULL…………………………. 273
5.7. Использование представлений для упрощения доступа к таблицам…………………………… 274
5.8. Выбор данных из нескольких таблиц……………………………………………………………………………… 275
5.9. Выбор строк из начала, конца или середины результирующего множества……………… 277
5.10. Что делать, если для LIMIT нужен “неправильный” порядок сортировки…………………. 280
5.11. Получение значений LIMIT из выражений……………………………………………………………………. 281
5.12. Объединение двух или более результатов SELECT…………………………………………………….. 282
5.13. Получение результатов подзапросов……………………………………………………………………………. 284
Глава 6. Управление таблицами…………………………………………………………… 286
6.0. Введение…………………………………………………………………………………………………………………………….. 286
6.1. Клонирование таблицы……………………………………………………………………………………………………. 286
6.2. Выбор результирующего множества в существующую таблицу………………………………… 287
6.3. Создание временных таблиц……………………………………………………………………………………………. 290
6.4. Формирование уникальных имен таблиц……………………………………………………………………….. 292
6.5. Проверка или изменение механизма хранения данных для таблиц…………………………….. 293
6.6. Копирование таблиц с использованием утилиты mysqldump……………………………………….. 294
6.7. Копирование таблицы InnoDB с использованием переносимых
табличных пространств……………………………………………………………………………………………………. 297
6.8. Копирование таблицы MyISAM с помощью файла sdi…………………………………………………. 299
Глава 7. Работа со строками…………………………………………………………………. 301
7.0. Введение…………………………………………………………………………………………………………………………….. 301
7.1. Свойства строк………………………………………………………………………………………………………………….. 301
7.2. Выбор типа строковых данных……………………………………………………………………………………….. 306
7.3. Настройка набора символов для обмена данными с клиентской программой…………… 308
7.4. Создание строковых литералов………………………………………………………………………………………. 311
7.5. Проверка или изменение набора символов или порядка расстановки символов для строки 314
7.6. Преобразование регистра букв строки…………………………………………………………………………… 316
7.7. Сравнение строковых значений………………………………………………………………………………………. 318
7.8. Преобразование между десятичным, восьмеричным и шестнадцатеричным форматами 321
7.9. Преобразование между ASCII, BIT и шестнадцатеричным форматами……………………… 322
7.10. Поиск по образцу с помощью шаблонов SQL………………………………………………………………. 325
7.11. Поиск по образцу с помощью регулярных выражений……………………………………………….. 328
7.12. Инвертирование строк……………………………………………………………………………………………………. 333
7.13. Проверка вхождения подстроки в строку…………………………………………………………………….. 334
7.14. Разбиение и объединение строк…………………………………………………………………………………….. 335
7.15. Поиск с помощью индекса FULLTEXT…………………………………………………………………………… 338
7.16. FULLTEXT-поиск и короткие слова……………………………………………………………………………….. 344
7.17. Включение и исключение слов из FULLTEXT-поиска………………………………………………….. 346
7.18. Поиск фразы при помощи индекса FULLTEXT……………………………………………………………… 347
Глава 8. Работа с датами и временем……………………………………………………. 349
8.0. Введение…………………………………………………………………………………………………………………………….. 349
8.1. Выбор временных типов данных…………………………………………………………………………………….. 350
8.2. Представление секунд в виде дроби……………………………………………………………………………….. 352
8.3. Изменение формата даты MySQL……………………………………………………………………………………. 355
8.4. Установка часового пояса клиента…………………………………………………………………………………. 358
8.5. Установка часового пояса сервера…………………………………………………………………………………. 360
8.6. Смещение временных значений при изменении часового пояса………………………………….. 362
8.7. Определение текущей даты или времени……………………………………………………………………….. 363
8.8. Использование TIMESTAMP или DATETIME для отслеживания времени изменения записей 364
8.9. Разбиение дат и времени на части…………………………………………………………………………………… 367
8.10. Синтез дат и времени с помощью функций извлечения составляющих…………………….. 372
8.11. Преобразование времени в более простые единицы и обратно…………………………………. 374
8.12. Вычисление интервалов между датами или значениями времени…………………………….. 378
8.13. Добавление значений даты или времени……………………………………………………………………… 382
8.14. Вычисление возраста……………………………………………………………………………………………………… 388
8.15. Нахождение первого и последнего дней месяца или длительности месяца……………… 389
8.16. Определение дня недели для даты………………………………………………………………………………… 392
8.17. Определение дат для дней текущей недели………………………………………………………………….. 392
8.18. Стандартизация не-совсем-ISO-строк…………………………………………………………………………… 395
8.19. Выбор записей по временным характеристикам…………………………………………………………. 397
Глава 9. Сортировка результатов запроса…………………………………………….. 401
9.0. Введение…………………………………………………………………………………………………………………………….. 401
9.1. Использование ORDER BY для сортировки результатов запроса………………………………… 402
9.2. Сортировка результатов выражения………………………………………………………………………………. 405
9.3. Сортировка одного набора значений и вывод другого…………………………………………………. 407
9.4. Сортировка и чувствительность к регистру…………………………………………………………………… 411
9.5. Сортировка в хронологическом порядке………………………………………………………………………… 414
9.6. Сортировка по подстрокам значений столбцов…………………………………………………………….. 418
9.7. Сортировка по подстрокам фиксированной длины………………………………………………………. 419
9.8. Сортировка по подстрокам переменной длины…………………………………………………………….. 422
9.9. Сортировка имен хостов по доменам……………………………………………………………………………… 426
9.10. Сортировка IP-адресов в числовом порядке………………………………………………………………… 429
9.11. Размещение некоторых значений в начале или в конце упорядоченного списка…….. 431
9.12. Сортировка в порядке, определенном пользователем………………………………………………… 434
9.13. Сортировка значений ENUM…………………………………………………………………………………………. 435
Глава 10. Формирование итогов…………………………………………………………… 439
10.0. Введение………………………………………………………………………………………………………………………….. 439
10.1. Суммирование с помощью функции COUNT()……………………………………………………………… 441
10.2. Суммирование при помощи функций MIN() и MAX()…………………………………………………… 443
10.3. Суммирование при помощи функций SUM() и AVG()…………………………………………………… 444
10.4. Использование ключевого слова DISTINCT для удаления дубликатов…………………….. 446
10.5. Создание представления для упрощения работы с итоговыми данными…………………. 448
10.6. Поиск значений, связанных с минимальным и максимальным значениями………………. 449
10.7. Управление чувствительностью к регистру функций MIN() и MAX()…………………………. 451
10.8. Разбиение итогов на подгруппы……………………………………………………………………………………. 453
10.9. Обработка значений NULL с помощью агрегирующих функций……………………………….. 457
10.10. Выбор групп только с определенными характеристиками………………………………………. 460
10.11. Устанавливаем уникальность значения……………………………………………………………………… 461
10.12. Группировка по результатам выражения…………………………………………………………………… 462
10.13. Классификация некатегориальных данных……………………………………………………………….. 463
10.14. Нахождение наибольшего и наименьшего из итоговых значений…………………………… 466
10.15. Итоги по датам……………………………………………………………………………………………………………… 468
10.16. Одновременная работа с итогами по группам и общим итогом………………………………. 470
10.17. Формирование отчета, содержащего итоговую информацию и список………………….. 473
10.18. Формирование итогов из временных результирующих множеств…………………………… 476
Глава 11. Использование хранимых подпрограмм, триггеров и запланированных событий 478
11.0. Введение………………………………………………………………………………………………………………………….. 478
11.1. Создание объектов с составными инструкциями…………………………………………………………. 480
11.2. Использование хранимых функций для упрощения вычислений………………………………. 482
11.3. Использование хранимых процедур для получения нескольких значений………………. 484
11.4. Использование триггеров для регистрации изменений в таблице……………………………… 486
11.5. Планирование действий в базе данных с помощью событий…………………………………….. 489
11.6. Разработка вспомогательных подпрограмм для выполнения
динамических запросов………………………………………………………………………………………………….. 491
11.7. Обнаружение ситуаций “no more rows” с помощью обработчиков
особых ситуаций…………………………………………………………………………………………………………….. 493
11.8. Перехват и игнорирование ошибок с помощью обработчиков особых ситуаций……. 494
11.9. Генерация ошибок и предупреждений………………………………………………………………………….. 495
11.10. Регистрация ошибок путем доступа к диагностической области……………………………. 497
11.11. Использование триггеров для предварительной обработки или отклонения данных 501
Глава 12. Работа с метаданными………………………………………………………….. 504
12.0. Введение………………………………………………………………………………………………………………………….. 504
12.1. Определение числа строк, обработанных запросом…………………………………………………… 505
12.2. Получение метаданных результирующего множества……………………………………………….. 509
12.3. Вывод списков таблиц и баз данных или проверка их существования…………………….. 519
12.4. Вывод списков представлений или проверка их существования……………………………….. 520
12.5. Получение определений столбцов таблицы………………………………………………………………… 521
12.6. Получение информации о столбцах ENUM и SET……………………………………………………….. 526
12.7. Получение метаданных сервера……………………………………………………………………………………. 528
12.8. Создание приложений, адаптирующихся к версии сервера MySQL…………………………. 529
12.9. Обнаружение дочерних таблиц, которые ссылаются на определенную таблицу через ограничения внешнего ключа………………………………………………………………………………………………………………………………………….. 531
12.10. Получение списка триггеров……………………………………………………………………………………….. 533
12.11. Получение списка хранимых подпрограмм и запланированных событий…………….. 534
12.12. Получение списка подключаемых модулей………………………………………………………………. 536
12.13. Получение списка наборов символов и порядков расстановки……………………………….. 537
12.14. Получение списка ограничений CHECK…………………………………………………………………….. 541
Глава 13. Импорт и экспорт данных…………………………………………………….. 542
13.0. Введение………………………………………………………………………………………………………………………….. 542
13.1. Импорт с помощью LOAD DATA и утилиты mysqlimport……………………………………………… 545
13.2. Указание разделителей полей и строк………………………………………………………………………….. 549
13.3. Использование кавычек и специальных символов………………………………………………………. 551
13.4. Обработка дубликатов индексированных записей……………………………………………………… 552
13.5. Диагностика при ошибках во входных данных…………………………………………………………… 553
13.6. Пропуск строк в файле данных……………………………………………………………………………………… 555
13.7. Определение порядка ввода столбцов………………………………………………………………………….. 555
13.8. Предварительная обработка входных значений, помещаемых в базу данных………… 556
13.9. Пропуск столбцов файла данных………………………………………………………………………………….. 558
13.10. Импорт файлов в формате CSV……………………………………………………………………………………. 559
13.11. Экспорт результатов запроса из MySQL……………………………………………………………………. 560
13.12. Импорт и экспорт значений NULL……………………………………………………………………………….. 562
13.13. Экспорт данных в SQL-формат……………………………………………………………………………………. 564
13.14. Импорт данных SQL……………………………………………………………………………………………………… 565
13.15. Экспорт результатов запроса в XML………………………………………………………………………….. 566
13.16. Импорт XML в MySQL…………………………………………………………………………………………………. 568
13.17. Импорт данных в формате JSON…………………………………………………………………………………. 569
13.18. Импорт данных из MongoDB……………………………………………………………………………………….. 571
13.19. Экспорт данных в формате JSON………………………………………………………………………………… 572
13.20. Разработка структуры таблицы на основе файла данных……………………………………….. 573
Глава 14. Проверка и изменение формата данных……………………………….. 576
14.0. Введение………………………………………………………………………………………………………………………….. 576
14.1. Использование режима SQL для отклонения неверных входных значений……………… 577
14.2. Использование ограничений CHECK для отклонения недопустимых значений………. 579
14.3. Использование триггеров для отклонения входных значений……………………………………. 581
14.4. Создание цикла обработки ввода…………………………………………………………………………………. 583
14.5. Размещение часто выполняемых проверок в библиотеке…………………………………………… 584
14.6. Проверка корректности. Сравнение с образцом………………………………………………………….. 586
14.7. Образцы для широкой классификации…………………………………………………………………………. 589
14.8. Образцы для числовых значений………………………………………………………………………………….. 589
14.9. Образцы для дат и времени……………………………………………………………………………………………. 591
14.10. Образцы для адресов электронной почты и URL………………………………………………………. 594
14.11. Проверка корректности при помощи метаданных таблицы…………………………………….. 595
14.12. Проверка корректности при помощи справочной таблицы……………………………………… 599
14.13. Преобразование двузначных значений года в четырехзначные……………………………… 601
14.14. Проверка корректности составляющих даты и времени…………………………………………… 603
14.15. Создание утилит для обработки дат…………………………………………………………………………… 605
14.16. Импорт не-ISO значений дат……………………………………………………………………………………….. 609
14.17. Экспорт не-ISO значений дат………………………………………………………………………………………. 611
14.18. Предварительная обработка и импорт файла……………………………………………………………. 612
Глава 15. Формирование и использование последовательностей…………. 614
15.0. Введение………………………………………………………………………………………………………………………….. 614
15.1. Создание последовательности со столбцами AUTO_INCREMENT……………………………. 615
15.2. Выбор типа для столбца последовательности…………………………………………………………….. 618
15.3. Удаление записей и формирование последовательности…………………………………………… 620
15.4. Извлечение значений последовательности………………………………………………………………….. 622
15.5. Перенумерация существующей последовательности…………………………………………………. 626
15.6. Расширение диапазона последовательности………………………………………………………………. 628
15.7. Повторное использование последних значений последовательности………………………. 629
15.8. Управление изменением нумерации строк…………………………………………………………………… 630
15.9. Добавление последовательности в существующую таблицу…………………………………….. 631
15.10. Управление несколькими столбцами AUTO_INCREMENT одновременно………………. 632
15.11. Использование значений AUTO_INCREMENT для связывания таблиц……………………. 633
15.12. Генераторы однострочных последовательностей……………………………………………………. 636
15.13. Формирование повторяющихся последовательностей…………………………………………….. 639
15.14. Использование произвольных значений приращения………………………………………………. 640
15.15. Использование оконных функций для нумерации строк в результирующем множестве……….. 643
15.16. Генерация последовательностей с помощью рекурсивных обобщенных табличных выражений 644
15.17. Создание и хранение нестандартных последовательностей…………………………………… 647
Глава 16. Использование соединений и подзапросов……………………………. 654
16.0. Введение………………………………………………………………………………………………………………………….. 654
16.1. Нахождение строк одной таблицы, соответствующих строкам другой……………………. 655
16.2. Нахождение строк, которым не соответствуют никакие строки другой таблицы……. 663
16.3. Выявление и удаление несвязанных записей……………………………………………………………….. 668
16.4. Сравнение таблицы с самой собой……………………………………………………………………………….. 671
16.5. Вывод списков для записей “главная-подчиненная” и итогов……………………………………. 675
16.6. Отношение “многие-ко-многим”…………………………………………………………………………………….. 679
16.7. Нахождение строк с минимальным и максимальным значением в группе……………….. 683
16.8. Заполнение или обнаружение пустых мест в списке с помощью соединений………….. 686
16.9. Управление порядком вывода запроса с помощью соединения………………………………… 689
16.10. Объединение результатов нескольких запросов……………………………………………………….. 691
16.11. Обращение в программах к именам столбцов вывода, полученных при соединении таблиц 693
Глава 17. Статистические методы………………………………………………………… 695
17.0. Введение………………………………………………………………………………………………………………………….. 695
17.1. Получение описательных статистических показателей…………………………………………….. 695
17.2. Групповые статистические показатели………………………………………………………………………… 699
17.3. Получение частотного распределения…………………………………………………………………………. 701
17.4. Подсчет отсутствующих значений……………………………………………………………………………….. 704
17.5. Вычисление линейной регрессии и коэффициентов корреляции……………………………….. 706
17.6. Генерация случайных чисел………………………………………………………………………………………….. 709
17.7. Рандомизация набора строк………………………………………………………………………………………….. 710
17.8. Случайный выбор из набора строк………………………………………………………………………………. 713
17.9. Вычисление разности между последовательными строками…………………………………….. 715
17.10. Нарастающий итог и скользящее среднее………………………………………………………………….. 717
17.11. Присваивание рангов……………………………………………………………………………………………………. 721
17.12. Вычисление рейтинга команд……………………………………………………………………………………… 725
Глава 18. Обработка повторяющихся записей……………………………………… 731
18.0. Введение………………………………………………………………………………………………………………………….. 731
18.1. Предотвращение появления дубликатов в таблице…………………………………………………….. 732
18.2. Несколько уникальных ключей в таблице……………………………………………………………………. 734
18.3. Обработка дубликатов на этапе создания записи………………………………………………………. 735
18.4. Подсчет и выявление дубликатов………………………………………………………………………………….. 740
18.5. Удаление дубликатов из таблицы…………………………………………………………………………………. 743
Глава 19. Работа с JSON………………………………………………………………………. 748
19.0. Введение………………………………………………………………………………………………………………………….. 748
19.1. Выбор правильного типа данных…………………………………………………………………………………. 749
19.2. Вставка значений JSON………………………………………………………………………………………………….. 749
19.3. Проверка соответствия стандарту JSON………………………………………………………………………. 750
19.4. Форматирование значений JSON…………………………………………………………………………………… 754
19.5. Извлечение значений из документа JSON…………………………………………………………………….. 755
19.6. Поиск в документах JSON………………………………………………………………………………………………. 757
19.7. Вставка новых элементов в документ JSON…………………………………………………………………. 758
19.8. Обновление значений JSON……………………………………………………………………………………………. 760
19.9. Удаление элементов из документа JSON………………………………………………………………………. 761
19.10. Объединение нескольких документов JSON в один…………………………………………………… 761
19.11. Преобразование реляционных данных в формат JSON…………………………………………….. 765
19.12. Преобразование формата JSON в реляционный формат…………………………………………… 768
19.13. Исследование структуры данных JSON……………………………………………………………………… 770
19.14. Работа с JSON в MySQL как с хранилищем документов…………………………………………… 772
Глава 20. Выполнение транзакций………………………………………………………. 780
20.0. Введение………………………………………………………………………………………………………………………….. 780
20.1. Выбор механизма хранения, который поддерживает транзакции…………………………….. 781
20.2. Выполнение транзакций средствами SQL……………………………………………………………………. 782
20.3. Выполнение транзакций в программах………………………………………………………………………… 784
20.4. Использование транзакций в программах на Perl………………………………………………………… 786
20.5. Использование транзакций в программах на Ruby…………………………………………………….. 787
20.6. Использование транзакций в программах на PHP………………………………………………………. 788
20.7. Использование транзакций в программах на Python………………………………………………….. 789
20.8. Использование транзакций в программах на Go…………………………………………………………. 790
20.9. Обработка транзакций в Go с помощью функций, использующих контекст…………….. 791
20.10. Использование транзакций в программах на Java……………………………………………………. 794
Глава 21. Производительность запросов………………………………………………. 796
21.0. Введение………………………………………………………………………………………………………………………….. 796
21.1. Создание индексов………………………………………………………………………………………………………….. 797
21.2. Суррогатный первичный ключ……………………………………………………………………………………… 799
21.3. Поддержание индексов…………………………………………………………………………………………………… 801
21.4. Как принять решение об использовании индекса в запросе……………………………………….. 803
21.5. Определение порядка для составных индексов…………………………………………………………… 804
21.6. Использование возрастающих и убывающих индексов……………………………………………… 806
21.7. Использование функциональных индексов………………………………………………………………….. 809
21.8. Использование индексов в вычисляемых столбцах…………………………………………………….. 811
21.9. Поиск с помощью полнотекстового индекса………………………………………………………………… 814
21.10. Использование пространственных индексов и географических данных………………… 816
21.11. Создание и использование гистограмм………………………………………………………………………. 820
21.12. Написание высокопроизводительных запросов………………………………………………………… 827
Глава 22. Администрирование сервера…………………………………………………. 833
22.0. Введение………………………………………………………………………………………………………………………….. 833
22.1. Конфигурирование сервера…………………………………………………………………………………………… 833
22.2. Управление интерфейсом подключаемых модулей…………………………………………………….. 836
22.3. Управление журналированием сервера……………………………………………………………………….. 838
22.4. Ротация и установка срока действия файлов журналов……………………………………………… 841
22.5. Ротация таблиц журналов или строк таблицы журналов, у которых истекает
срок хранения………………………………………………………………………………………………………………….. 844
22.6. Конфигурирование механизмов хранения данных……………………………………………………… 845
Глава 23. Мониторинг сервера MySQL…………………………………………………. 848
23.0. Введение………………………………………………………………………………………………………………………….. 848
23.1. Зачем выполнять мониторинг сервера MySQL?………………………………………………………….. 849
23.2. Поиск источников информации для мониторинга MySQL………………………………………….. 855
23.3. Проверка времени доступности сервера………………………………………………………………………. 859
23.4. Устранение проблем с запуском сервера……………………………………………………………………… 860
23.5. Определение нагрзуки на систему ввода-вывода сервера MySQL…………………………….. 861
23.6. Определение загрузки процессора потоками MySQL…………………………………………………. 864
23.7. Лимиты соединений MySQL………………………………………………………………………………………….. 867
23.8. Проверка надлежащего размера буферного пула……………………………………………………….. 868
23.9. Поиск информации о механизме хранения данных…………………………………………………….. 871
23.10. Использование журнала ошибок для устранения сбоев в работе сервера MySQL.. 874
23.11. Журнал медленных запросов………………………………………………………………………………………. 876
23.12. Мониторинг с помощью общего журнала запросов…………………………………………………. 878
23.13. Использование бинарного журнала для выявления изменений……………………………….. 880
Глава 24. Безопасность………………………………………………………………………… 882
24.0. Введение………………………………………………………………………………………………………………………….. 882
24.1. Основные сведения о таблице mysql.user……………………………………………………………………… 882
24.2. Управление учетными записями пользователей………………………………………………………….. 883
24.3. Внедрение политики паролей………………………………………………………………………………………… 887
24.4. Проверка надежности пароля……………………………………………………………………………………….. 889
24.5. Истечение срока действия паролей………………………………………………………………………………. 889
24.6. Установка нового пароля для собственной учетной записи………………………………………. 891
24.7. Переустановка пароля при истечении срока его действия…………………………………………. 891
24.8. Обнаружение и удаление анонимных учетных записей…………………………………………….. 892
24.9. Изменение учетных записей “Any Host” и “Many Host”………………………………………………. 893
24.10. Использование TLS (SSL)…………………………………………………………………………………………….. 894
24.11. Использование ролей……………………………………………………………………………………………………. 898
24.12. Использование представлений для обеспечения безопасности при доступе к таблицам 899
24.13. Использование хранимых процедур для безопасной модификации данных………….. 902
Предметный указатель…………………………………………………………………………. 905
Об авторах……………………………………………………………………………………………. 910
Об изображении на обложке………………………………………………………………… 911

Света Смирнова — ведущий специалист службы технической поддержки в компании Percona. Среди главных сфер ее профессиональной деятельности — решение проблем и обучение эффективной работе с MySQL, помощь в устранении ошибок и преодолении подводных камней этой СУБД.

Алкин Тезуйсал — вице-президент по глобальным сервисам компании ChistaDATA. Имеет большой опыт работы с реляционными базами данных с открытым исходным кодом.









