24.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, отображая только три части информации: имя таблицы, её тип и движок хранения.
Учёт набора символов
Определение для символьных столбцов (например, TABLES.TABLE_NAME) обычно VARCHAR(, где N) CHARACTER SET
utf8N составляет не менее 64. MySQL использует по умолчанию сортировку этого набора символов (utf8_general_ci) для всех поисков, сортировок, сравнений и других строковых операций в таких столбцах.
Поскольку некоторые объекты MySQL представляются в виде файлов, поиск в строковых столбцах INFORMATION_SCHEMA может зависеть от чувствительности файловой системы к регистру. Более подробная информация приведена в Разделе 10.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, описанные в Разделе 24.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, см. Раздел 8.2.3, «Оптимизация запросов INFORMATION_SCHEMA».
Учёт стандартов
Реализация табличных структур INFORMATION_SCHEMA в MySQL следует стандарту ANSI/ISO SQL:2003 Part 11 Schemata. Наша цель — приблизительное соответствие ядру SQL:2003 F021 Basic information schema.
Пользователи 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. Если в этом поле указано “расширение MySQL”, столбец является расширением MySQL к стандартному SQL.
Многие разделы указывают, какой оператор SHOW эквивалентен оператору SELECT, который извлекает информацию из INFORMATION_SCHEMA. Для операторов SHOW, которые отображают информацию для базы данных по умолчанию, если вы опустите предложение FROM
, вы часто можете выбрать информацию для базы данных по умолчанию, добавив условие db_nameAND TABLE_SCHEMA = SCHEMA() к предложению WHERE запроса, извлекающего информацию из таблицы INFORMATION_SCHEMA.
Связанная информация
В этих разделах обсуждаются дополнительные темы, связанные с INFORMATION_SCHEMA:
информация о таблицах
INFORMATION_SCHEMA, специфичных для движка храненияInnoDB: Раздел 24.4, “INFORMATION_SCHEMA InnoDB Tables”информация о таблицах
INFORMATION_SCHEMA, специфичных для плагина пула потоков: Раздел 24.5, “INFORMATION_SCHEMA Thread Pool Tables”информация о таблицах
INFORMATION_SCHEMA, специфичных для плагинаCONNECTION_CONTROL: Раздел 24.6, “INFORMATION_SCHEMA Connection-Control Tables”ответы на часто задаваемые вопросы относительно базы данных
INFORMATION_SCHEMA: Раздел A.7, “MySQL 5.7 FAQ: INFORMATION_SCHEMA”INFORMATION_SCHEMAзапросы и оптимизатор: Раздел 8.2.3, “Оптимизация запросов INFORMATION_SCHEMA”Влияние сортировки на сравнения в
INFORMATION_SCHEMA: Раздел 10.8.7, “Использование сортировки в поисках INFORMATION_SCHEMA”
© 2025 Oracle
Licensed under the GPLv2 License.