Spec-Zone.ru › MySQL 5.7

24.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, отображая только три части информации: имя таблицы, её тип и движок хранения.

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

Определение для символьных столбцов (например, TABLES.TABLE_NAME) обычно VARCHAR(N) CHARACTER SET utf8, где N составляет не менее 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.

END_OF_DOCUMENT_MARKER

Соглашения в разделах справки INFORMATION_SCHEMA

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

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

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

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

Многие разделы указывают, какой оператор SHOW эквивалентен оператору SELECT, который извлекает информацию из INFORMATION_SCHEMA. Для операторов SHOW, которые отображают информацию для базы данных по умолчанию, если вы опустите предложение FROM db_name, вы часто можете выбрать информацию для базы данных по умолчанию, добавив условие AND 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/information-schema-introduction.html

Spec-Zone.ru

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