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