16.7 Различия в использовании словаря данных
Использование сервера MySQL со словарем данных влечет за собой некоторые операционные различия по сравнению с сервером, не имеющим словаря данных:
-
Ранее включение системной переменной
innodb_read_onlyпрепятствовало созданию и удалению таблиц только для движка храненияInnoDB. Начиная с MySQL 9.2, включениеinnodb_read_onlyпредотвращает эти операции для всех движков хранения. Операции создания и удаления таблиц любого движка хранения изменяют таблицы словаря данных в базе данных системыmysql, но эти таблицы используют движок храненияInnoDBи не могут быть изменены, когда включенаinnodb_read_only. Тот же принцип применим к другим операциям с таблицами, требующим изменения таблиц словаря данных. Примеры:ANALYZE TABLEтерпит неудачу, потому что обновляет статистику таблиц, которая хранится в словаре данных.ALTER TABLEтерпит неудачу, потому что обновляет обозначение движка хранения, которое хранится в словаре данных.tbl_nameENGINE=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_tblLIKEsrc_tblsrc_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.