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