Spec-Zone.ru › MySQL 9.2

28.1 Введение

INFORMATION_SCHEMA предоставляет доступ к метаданным базы данных, информации о сервере MySQL, такой как имя базы данных или таблицы, тип данных столбца или права доступа. Другие термины, которые иногда используются для этой информации, — это «словарь данных» и «каталог системы».

  • Примечания к использованию INFORMATION_SCHEMA

  • Учет наборов символов

  • INFORMATION_SCHEMA как альтернатива командам SHOW

  • INFORMATION_SCHEMA и права доступа

  • Учет производительности

  • Учет стандартов

  • Конвенции в разделах справочника INFORMATION_SCHEMA

  • Связанная информация

Примечания к использованию INFORMATION_SCHEMA

INFORMATION_SCHEMA — это база данных в каждом экземпляре MySQL, хранящая информацию обо всех других базах данных, которые поддерживает сервер MySQL. База данных INFORMATION_SCHEMA содержит несколько таблиц только для чтения. На самом деле, это представления, а не базовые таблицы, поэтому у них нет связанных файлов, и вы не можете настраивать триггеры для них. Кроме того, нет каталога базы данных с таким именем.

Хотя вы можете выбрать INFORMATION_SCHEMA в качестве базы данных по умолчанию с помощью команды USE, вы можете только читать содержимое таблиц, но не выполнять операции INSERT, UPDATE или DELETE над ними.

Вот пример команды, которая извлекает информацию из INFORMATION_SCHEMA:

mysql> SELECT table_name, table_type, engine
       FROM information_schema.tables
       WHERE table_schema = 'db5'
       ORDER BY table_name;
+------------+------------+--------+
| table_name | table_type | engine |
+------------+------------+--------+
| fk         | BASE TABLE | InnoDB |
| fk2        | BASE TABLE | InnoDB |
| goto       | BASE TABLE | MyISAM |
| into       | BASE TABLE | MyISAM |
| k          | BASE TABLE | MyISAM |
| kurs       | BASE TABLE | MyISAM |
| loop       | BASE TABLE | MyISAM |
| pk         | BASE TABLE | InnoDB |
| t          | BASE TABLE | MyISAM |
| t2         | BASE TABLE | MyISAM |
| t3         | BASE TABLE | MyISAM |
| t7         | BASE TABLE | MyISAM |
| tables     | BASE TABLE | MyISAM |
| v          | VIEW       | NULL   |
| v2         | VIEW       | NULL   |
| v3         | VIEW       | NULL   |
| v56        | VIEW       | NULL   |
+------------+------------+--------+
17 rows in set (0.01 sec)

Объяснение: команда запрашивает список всех таблиц в базе данных db5, отображая только три элемента информации: имя таблицы, её тип и хранилище.

Информация о сгенерированных невидимых первичных ключах по умолчанию отображается во всех таблицах INFORMATION_SCHEMA, описывающих столбцы таблицы, ключи или оба, такие как таблицы COLUMNS и STATISTICS. Если вы хотите скрыть такую информацию в запросах, которые выбирают данные из этих таблиц, вы можете это сделать, установив значение системной переменной сервера show_gipk_in_create_table_and_information_schema на значение OFF. Для получения дополнительной информации см. Раздел 15.1.21.11, «Сгенерированные невидимые первичные ключи».

Учет наборов символов

Определение для столбцов символов (например, TABLES.TABLE_NAME) обычно VARCHAR(N) CHARACTER SET utf8mb3, где N составляет как минимум 64. MySQL использует по умолчанию кодировку этого набора символов (utf8mb3_general_ci) для всех поисков, сортировок, сравнений и других строковых операций со столбцами.

Поскольку некоторые объекты MySQL представлены в виде файлов, поиск в столбцах INFORMATION_SCHEMA типа строка может зависеть от чувствительности файловой системы к регистру. Для получения дополнительной информации см. Раздел 12.8.7, «Использование сортировки в запросах к INFORMATION_SCHEMA».

INFORMATION_SCHEMA как альтернатива командам SHOW

Команда SELECT ... FROM INFORMATION_SCHEMA предназначена как более последовательный способ доступа к информации, предоставляемой различными командами SHOW, которые поддерживает MySQL (SHOW DATABASES, SHOW TABLES и т. д.). Использование SELECT имеет следующие преимущества по сравнению с SHOW:

  • Оно соответствует правилам Кодда, так как весь доступ осуществляется к таблицам.

  • Вы можете использовать знакомый синтаксис команды SELECT и лишь узнать имена некоторых таблиц и столбцов.

  • Разработчику не нужно беспокоиться об добавлении ключевых слов.

  • Вы можете фильтровать, сортировать, конкатенировать и преобразовывать результаты запросов INFORMATION_SCHEMA в любой необходимый для вашего приложения формат, такой как структура данных или текстовое представление для парсинга.

  • Этот подход более совместим с другими системами баз данных. Например, пользователи Oracle Database знакомы с запросами к таблицам в словаре данных Oracle.

Поскольку SHOW знакома и широко используется, команды SHOW остаются альтернативой. Фактически, вместе с реализацией INFORMATION_SCHEMA есть улучшения в командах SHOW, как описано в Разделе 28.8, «Расширения команд SHOW».

INFORMATION_SCHEMA и права доступа

Для большинства таблиц INFORMATION_SCHEMA каждый пользователь MySQL имеет право на доступ к ним, но может видеть только строки в таблицах, соответствующие объектам, для которых у пользователя есть соответствующие права доступа. В некоторых случаях (например, столбец ROUTINE_DEFINITION в таблице INFORMATION_SCHEMA ROUTINES) пользователи, у которых недостаточно прав, видят NULL. Некоторые таблицы имеют разные требования к правам; для них требования указаны в описаниях соответствующих таблиц. Например, таблицы InnoDB (таблицы с именами, начинающимися с INNODB_) требуют права PROCESS.

Те же права применимы к выбору информации из INFORMATION_SCHEMA и просмотру той же информации через команды SHOW. В любом случае, вам необходимо иметь некоторые права на объект, чтобы увидеть информацию об этом объекте.

Учет производительности

Запросы INFORMATION_SCHEMA, которые ищут информацию более чем в одной базе данных, могут занимать много времени и влиять на производительность. Для проверки эффективности запроса можно использовать EXPLAIN. Подробности использования вывода EXPLAIN для настройки запросов INFORMATION_SCHEMA см. в Разделе 10.2.3, «Оптимизация запросов к INFORMATION_SCHEMA».

Учет стандартов

Реализация структуры таблиц INFORMATION_SCHEMA в MySQL соответствует стандарту ANSI/ISO SQL:2003, часть 11 Схемы. Наша цель — приблизительное соответствие ядру SQL:2003, функция F021 Базовая схема информации.

Пользователи SQL Server 2000 (который также следует стандарту) могут заметить сильное сходство. Однако MySQL опустил многие столбцы, не относящиеся к нашей реализации, и добавил столбцы, специфичные для MySQL. Одним из таких добавленных столбцов является столбец ENGINE в таблице INFORMATION_SCHEMA TABLES.

Хотя другие СУБД используют различные имена, такие как syscat или system, стандартное имя — INFORMATION_SCHEMA.

Чтобы избежать использования имен, зарезервированных в стандарте или в DB2, SQL Server или Oracle, мы изменили имена некоторых столбцов, помеченных “Расширение MySQL”. (Например, мы изменили COLLATION на TABLE_COLLATION в таблице TABLES.) См. список зарезервированных слов в конце этой статьи: https://web.archive.org/web/20070428032454/http://www.dbazine.com/db2/db2-disarticles/gulutzan5.

Правила в разделах справочника INFORMATION_SCHEMA

В следующих разделах описываются каждая таблица и столбец в INFORMATION_SCHEMA. Для каждого столбца есть три вида информации:

  • “Имя столбца” указывает имя столбца в таблице INFORMATION_SCHEMA. Это соответствует стандартному имени SQL, если в поле “Примечания” не указано “Расширение MySQL.”

  • “Имя эквивалентного поля” указывает эквивалентное имя поля в ближайшем выражении SHOW, если таковое имеется.

  • “Примечания” предоставляет дополнительную информацию, где это применимо. Если это поле NULL, это означает, что значение столбца всегда NULL. Если в этом поле указано “Расширение MySQL”, столбец является расширением MySQL для стандартного SQL.

Многие разделы указывают, какое выражение SHOW эквивалентно выражению SELECT, которое извлекает информацию из INFORMATION_SCHEMA. Для выражений SHOW, отображающих информацию по базе данных по умолчанию, если вы опускаете клаузу FROM db_name, вы часто можете выбрать информацию для базы данных по умолчанию, добавив условие AND TABLE_SCHEMA = SCHEMA() к клаузе WHERE запроса, извлекающего информацию из таблицы INFORMATION_SCHEMA.

Связанная информация

В этих разделах обсуждаются дополнительные темы, связанные с INFORMATION_SCHEMA:

  • информация о таблицах INFORMATION_SCHEMA, специфичных для InnoDB движка хранения: Раздел 28.4, «Таблицы INFORMATION_SCHEMA InnoDB»

  • информация о таблицах INFORMATION_SCHEMA, специфичных для плагина пула потоков: Раздел 28.5, «Таблицы INFORMATION_SCHEMA пула потоков»

  • информация о таблицах INFORMATION_SCHEMA, специфичных для плагина CONNECTION_CONTROL: Раздел 28.6, «Таблицы INFORMATION_SCHEMA управления подключениями»

  • ответы на часто задаваемые вопросы о базе данных INFORMATION_SCHEMA: Раздел A.7, «Вопросы и ответы MySQL 9.2: INFORMATION_SCHEMA»

  • запросы INFORMATION_SCHEMA и оптимизатор: Раздел 10.2.3, «Оптимизация запросов INFORMATION_SCHEMA»

  • влияние кодировки на сравнения INFORMATION_SCHEMA: Раздел 12.8.7, «Использование кодировки в поисках INFORMATION_SCHEMA»

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/information-schema-introduction.html

Spec-Zone.ru

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