28.1 Введение
INFORMATION_SCHEMA предоставляет доступ к метаданным базы данных, информации о сервере MySQL, такой как имя базы данных или таблицы, тип данных столбца или права доступа. Другие термины, которые иногда используются для этой информации, это «словарь данных» и «каталог систем».
Примечания по использованию 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.20.11, «Сгенерированные невидимые первичные ключи».
Учёт набора символов
Определение для символьных столбцов (например, TABLES.TABLE_NAME) обычно VARCHAR(, где N) CHARACTER SET
utf8mb3N не меньше 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Имя” указывает имя столбца в таблицеINFORMATION_SCHEMA. Это соответствует стандартному имени SQL, если в поле “Примечания” не указано “Расширение MySQL”.“
SHOWИмя” указывает эквивалентное имя поля в ближайшем оператореSHOW, если он есть.“Примечания” предоставляет дополнительную информацию, если это необходимо. Если это поле
NULL, это означает, что значение столбца всегдаNULL. Если это поле содержит “Расширение MySQL”, столбец является расширением MySQL к стандарту SQL.
Многие разделы указывают, какому оператору SHOW эквивалентен запрос SELECT, который извлекает информацию из таблицы INFORMATION_SCHEMA. Для операторов SHOW, которые отображают информацию для базы данных по умолчанию, если вы опускаете предложение FROM
, вы часто можете выбрать информацию для базы данных по умолчанию, добавив условие db_nameAND TABLE_SCHEMA = SCHEMA() в предложение WHERE запроса, извлекающего информацию из таблицы INFORMATION_SCHEMA.
Связанная информация
В этих разделах обсуждаются дополнительные темы, связанные с INFORMATION_SCHEMA:
информация о таблицах
INFORMATION_SCHEMA, специфичных для хранилищаInnoDB: Раздел 28.4, “Таблицы INFORMATION_SCHEMA InnoDB”информация о таблицах
INFORMATION_SCHEMA, специфичных для плагина пула потоков: Раздел 28.5, “Таблицы INFORMATION_SCHEMA Thread Pool”информация о таблицах
INFORMATION_SCHEMA, специфичных для плагинаCONNECTION_CONTROL: Раздел 28.6, “Таблицы INFORMATION_SCHEMA управления соединениями”ответы на часто задаваемые вопросы о базе данных
INFORMATION_SCHEMA: Раздел A.7, “MySQL 8.4 FAQ: INFORMATION_SCHEMA”запросы
INFORMATION_SCHEMAи оптимизатор: Раздел 10.2.3, “Оптимизация запросов INFORMATION_SCHEMA”влияние сортировки на сравнения
INFORMATION_SCHEMA: Раздел 12.8.7, “Использование сортировки в поисках INFORMATION_SCHEMA”
© 2025 Oracle
Licensed under the GPLv2 License.