Spec-Zone.ru › MySQL 9.2

16.7 Различия в использовании словаря данных

Использование сервера MySQL со словарем данных влечет за собой некоторые операционные различия по сравнению с сервером, не имеющим словаря данных:

  • Ранее включение системной переменной innodb_read_only препятствовало созданию и удалению таблиц только для движка хранения InnoDB. Начиная с MySQL 9.2, включение innodb_read_only предотвращает эти операции для всех движков хранения. Операции создания и удаления таблиц любого движка хранения изменяют таблицы словаря данных в базе данных системы mysql, но эти таблицы используют движок хранения InnoDB и не могут быть изменены, когда включена innodb_read_only. Тот же принцип применим к другим операциям с таблицами, требующим изменения таблиц словаря данных. Примеры:

    • ANALYZE TABLE терпит неудачу, потому что обновляет статистику таблиц, которая хранится в словаре данных.

    • ALTER TABLE tbl_name ENGINE=engine_name терпит неудачу, потому что обновляет обозначение движка хранения, которое хранится в словаре данных.

    Примечание

    Включение innodb_read_only также имеет важное значение для таблиц, не являющихся таблицами словаря данных, в базе данных системы mysql. Подробности см. в описании innodb_read_only в разделе 17.14 «Параметры запуска InnoDB и системные переменные»

  • Ранее таблицы в базе данных системы mysql были видны операторам DML и DDL. Начиная с MySQL 9.2, таблицы словаря данных невидимы и не могут быть изменены или запрошены напрямую. Однако в большинстве случаев существуют соответствующие INFORMATION_SCHEMA таблицы, которые можно запросить вместо этого. Это позволяет изменять основополагающие таблицы словаря данных по мере развития серверной разработки, сохраняя стабильный INFORMATION_SCHEMA интерфейс для использования приложениями.

  • Таблицы INFORMATION_SCHEMA в MySQL 9.2 тесно связаны со словарем данных, что приводит к нескольким различиям в использовании:

    • Ранее запросы INFORMATION_SCHEMA по статистике таблиц в таблицах STATISTICS и TABLES извлекали статистику напрямую из движков хранения. Начиная с MySQL 9.2, кэшированные статистические данные таблиц используются по умолчанию. Системная переменная information_schema_stats_expiry определяет период времени до истечения срока действия кэшированных статистических данных таблиц. Значение по умолчанию составляет 86400 секунд (24 часа). (Чтобы обновить кэшированные значения в любое время для данной таблицы, используйте ANALYZE TABLE.) Если кэшированных статистических данных нет или они истекли, статистика извлекается из движков хранения при запросе столбцов статистики таблиц. Чтобы всегда извлекать последнюю статистику напрямую из движков хранения, установите information_schema_stats_expiry на 0. Дополнительная информация приведена в разделе 10.2.3 «Оптимизация запросов INFORMATION_SCHEMA».

    • Несколько таблиц INFORMATION_SCHEMA являются представлениями таблиц словаря данных, что позволяет оптимизатору использовать индексы в этих базовых таблицах. В результате, в зависимости от выбора оптимизатора, порядок строк результатов для запросов INFORMATION_SCHEMA может отличаться от предыдущих результатов. Если порядок строк результата запроса должен иметь определенные характеристики, используйте предложение ORDER BY.

    • Запросы к таблицам INFORMATION_SCHEMA могут возвращать имена столбцов в другом регистре, чем в предыдущих сериях MySQL. Приложения должны проверять имена столбцов набора результатов без учета регистра. Если это не представляется возможным, можно использовать псевдонимы столбцов в списке select, которые возвращают имена столбцов в необходимом регистре. Например:

      SELECT TABLE_SCHEMA AS table_schema, TABLE_NAME AS table_name
      FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'users';
      
    • mysqldump больше не экспортирует базу данных INFORMATION_SCHEMA, даже если она явно указана в командной строке.

    • CREATE TABLE dst_tbl LIKE src_tbl требует, чтобы src_tbl была основной таблицей и терпит неудачу, если это таблица INFORMATION_SCHEMA, которая является представлением таблиц словаря данных.

    • Ранее заголовки набора результатов столбцов, выбранных из таблиц INFORMATION_SCHEMA, использовали регистр, указанный в запросе. Этот запрос создаёт набор результатов с заголовком table_name:

      SELECT table_name FROM INFORMATION_SCHEMA.TABLES;
      

      Начиная с MySQL 9.2, эти заголовки прописные; предыдущий запрос генерирует набор результатов с заголовком TABLE_NAME. При необходимости можно использовать псевдоним столбца для достижения другого регистра. Например:

      SELECT table_name AS 'table_name' FROM INFORMATION_SCHEMA.TABLES;
      
  • Словарь данных влияет на способ, которым mysqldump экспортирует информацию из базы данных системы mysql:

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

    • Ранее для включения хранимых процедур и событий при использовании опции --all-databases не требовались опции --routines и --events: экспорт включал базу данных mysql системы, и, следовательно, также таблицы proc и event, содержащие определения хранимых процедур и событий. Начиная с MySQL 9.2, таблицы event и proc не используются. Определения соответствующих объектов хранятся в таблицах словаря данных, но эти таблицы не экспортируются. Чтобы включить хранимые процедуры и события в экспорт, созданный с помощью опции --all-databases, используйте опции --routines и --events явно.

    • Ранее опция --routines требовала привилегии SELECT для таблицы proc. Начиная с MySQL 9.2, эта таблица не используется; --routines теперь требует глобальной привилегии SELECT вместо этого.

    • Ранее было возможно экспортировать определения хранимых процедур и событий вместе со временем их создания и изменения, экспортируя таблицы proc и event. Начиная с MySQL 9.2, эти таблицы не используются, поэтому экспортировать отметки времени нельзя.

  • Ранее создание хранимой процедуры, содержащей недопустимые символы, вызывало предупреждение. Начиная с MySQL 9.2, это ошибка.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/data-dictionary-usage-differences.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API