Spec-Zone.ru › MySQL 8.4

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

  • “SHOW Имя” указывает эквивалентное имя поля в ближайшем операторе 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 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/information-schema-introduction.html

Spec-Zone.ru

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