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.21.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. Это соответствует стандартному имени SQL, если в поле “Примечания” не указано “Расширение MySQL.”“Имя эквивалентного поля” указывает эквивалентное имя поля в ближайшем выражении
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 пула потоков»информация о таблицах
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.