Spec-Zone.ru › MySQL 8.4

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

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

  • Ранее включение системной переменной innodb_read_only предотвращало создание и удаление таблиц только для движка хранения InnoDB. Начиная с MySQL 8.4, включение 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 8.4, таблицы словаря данных не видны и не могут быть изменены или запрошены напрямую. Однако в большинстве случаев существуют соответствующие INFORMATION_SCHEMA таблицы, которые можно запросить вместо этого. Это позволяет изменять базовые таблицы словаря данных по мере развития сервера, сохраняя стабильный INFORMATION_SCHEMA интерфейс для использования приложениями.

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

    • Ранее запросы INFORMATION_SCHEMA статистики таблиц в таблицах STATISTICS и TABLES извлекали статистику непосредственно из движков хранения. Начиная с MySQL 8.4, кэшированные статистические данные таблиц используются по умолчанию. Системная переменная 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 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 8.4, эти заголовки имеют прописной регистр; предшествующий запрос производит набор результатов с заголовком TABLE_NAME. При необходимости для достижения другого регистра можно использовать псевдоним столбца. Например:

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

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

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

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

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

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

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

Spec-Zone.ru

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