
Information schema – это специальная системная база данных в SQL, которая содержит метаданные о структурах других баз данных: таблицах, столбцах, индексах, ограничениях и пользователях. Она стандартизирована и поддерживается большинством СУБД, включая MySQL, PostgreSQL и SQL Server. Использование этой схемы позволяет исследовать структуру базы без прямого обращения к системным таблицам СУБД.
Через Information schema можно быстро получить список всех таблиц и столбцов в базе, узнать типы данных, размеры полей, наличие первичных и внешних ключей, уникальных индексов и ограничений. Это особенно полезно при работе с крупными базами или при необходимости автоматизированного анализа структуры данных для генерации отчетов и схем.
Для практического применения рекомендуется изучить таблицы TABLES, COLUMNS, KEY_COLUMN_USAGE и SCHEMATA. Например, TABLES показывает все таблицы в базе, а COLUMNS дает детальную информацию о каждом столбце. Используя эти данные, можно строить динамические SQL-запросы, проверять корректность структуры и планировать оптимизацию индексов.
Работа с Information schema позволяет создавать скрипты для аудита базы данных, обнаруживать пустые или устаревшие таблицы и контролировать соответствие структуры схемы документации. Такие запросы повышают прозрачность и управляемость баз данных без риска модификации данных.
Как получить доступ к Information schema в разных СУБД

Доступ к Information schema зависит от используемой СУБД и уровня прав пользователя. Основная задача – подключиться к базе и выполнить SQL-запросы к системным таблицам схемы.
Для разных СУБД порядок действий следующий:
- MySQL: схема доступна по имени information_schema. Запрос всех таблиц базы выполняется командой:
SELECT * FROM information_schema.tables WHERE table_schema = 'имя_базы';
Пользователю достаточно прав SELECT на information_schema.
- PostgreSQL: схема называется information_schema и интегрирована с системными каталогами pg_catalog. Пример запроса для получения столбцов таблицы:
SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'имя_таблицы';
Права USAGE на схему и SELECT на таблицы обязательны.
- SQL Server: доступ осуществляется через INFORMATION_SCHEMA. Запрос списка таблиц:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_CATALOG = 'имя_базы';
Права VIEW DEFINITION или членство в роли db_datareader нужны для чтения метаданных.
- Oracle: Information schema отсутствует как единая стандартная схема. Вместо нее используют представления ALL_TAB_COLUMNS, ALL_TABLES и USER_TABLES. Пример:
SELECT column_name, data_type FROM all_tab_columns WHERE table_name = 'ИМЯ_ТАБЛИЦЫ';
Требуются права на просмотр представлений соответствующей базы.
Рекомендуется всегда проверять наличие необходимых прав и уточнять точное имя схемы, так как в разных версиях СУБД могут быть незначительные различия. Использование фильтров по базе, схеме или имени таблицы ускоряет выполнение запросов.
Какие таблицы входят в Information schema и что в них хранится
Information schema содержит набор системных таблиц, каждая из которых предоставляет метаданные о базе данных. Основные таблицы и их назначение:
- SCHEMATA – список всех баз данных и схем на сервере. Хранит имя схемы, владелца и кодировку.
- TABLES – информация о таблицах: имя, тип (BASE TABLE или VIEW), схема, дата создания и комментарии.
- COLUMNS – детальные данные по столбцам: имя, тип данных, длина, точность, возможность NULL и значение по умолчанию.
- KEY_COLUMN_USAGE – сведения о ключах: первичных, внешних и уникальных. Указывает таблицу, столбец и связанные ограничения.
- TABLE_CONSTRAINTS – информация о всех ограничениях таблиц, включая тип (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK) и имя ограничения.
- REFERENTIAL_CONSTRAINTS – связь внешних ключей с первичными, описание каскадных операций при обновлении или удалении.
- STATISTICS / INDEXES (в некоторых СУБД) – сведения об индексах, уникальности, порядке сортировки и покрытии столбцов.
Для анализа структуры базы рекомендуется использовать COLUMNS совместно с TABLES и KEY_COLUMN_USAGE. Такой подход позволяет автоматически формировать схемы, проверять соответствие документации и выявлять потенциальные проблемы с ограничениями или типами данных.
Как с помощью Information schema узнать структуру базы данных

С помощью Information schema можно полностью изучить структуру базы данных без прямого обращения к данным. Основной подход – использование запросов к таблицам TABLES и COLUMNS, а также к таблицам ограничений.
Основные шаги для анализа структуры:
- Список схем и баз: получить имена всех схем, чтобы определить области анализа:
SELECT schema_name FROM information_schema.schemata;
- Список таблиц: узнать, какие таблицы входят в выбранную схему:
SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = 'имя_схемы';
- Список столбцов: получить детальные сведения о каждом столбце таблицы:
SELECT column_name, data_type, character_maximum_length, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'имя_таблицы';
- Проверка ограничений: определить первичные и внешние ключи:
SELECT constraint_name, constraint_type FROM information_schema.table_constraints WHERE table_name = 'имя_таблицы';
- Связи между таблицами: выявить внешние ключи и зависимые таблицы:
SELECT kcu.column_name, kcu.referenced_table_name, kcu.referenced_column_name FROM information_schema.key_column_usage AS kcu WHERE kcu.table_name = 'имя_таблицы';
Комбинирование этих запросов позволяет построить полную карту базы данных: от схем и таблиц до типов данных и ограничений. Это помогает планировать изменения структуры, проверять соответствие документации и выявлять потенциальные конфликты между таблицами.
Использование Information schema для поиска таблиц и столбцов

С помощью Information schema можно быстро находить таблицы и столбцы по имени, типу данных или другим характеристикам. Это упрощает навигацию по крупным базам и помогает автоматизировать построение запросов.
Примеры поиска:
- Поиск таблицы по имени:
SELECT table_name FROM information_schema.tables WHERE table_name LIKE '%часть_имени%';
- Поиск столбца в конкретной таблице:
SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'имя_таблицы' AND column_name LIKE '%часть_имени%';
- Поиск столбцов определенного типа:
SELECT table_name, column_name FROM information_schema.columns WHERE data_type = 'varchar';
- Поиск по нескольким схемам:
SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE column_name LIKE '%дата%' ORDER BY table_schema, table_name;
Для ускорения поиска рекомендуется добавлять фильтры по схеме или типу таблицы. Это уменьшает количество строк в результатах и позволяет сосредоточиться только на релевантных объектах базы.
Проверка ограничений и индексов через Information schema

Information schema позволяет анализировать ограничения и индексы без обращения к данным таблиц. Это помогает выявлять потенциальные нарушения целостности и оптимизировать структуру базы.
Основные подходы:
- Проверка ограничений таблицы:
SELECT constraint_name, constraint_type FROM information_schema.table_constraints WHERE table_name = 'имя_таблицы';
Отображает PRIMARY KEY, FOREIGN KEY, UNIQUE и CHECK.
- Связь внешних ключей с родительскими столбцами:
SELECT kcu.column_name, kcu.referenced_table_name, kcu.referenced_column_name FROM information_schema.key_column_usage AS kcu WHERE kcu.table_name = 'имя_таблицы';
- Проверка индексов в MySQL:
SELECT index_name, column_name, non_unique FROM information_schema.statistics WHERE table_name = 'имя_таблицы';
Позволяет определить состав индексов и уникальность столбцов.
- Идентификация уникальных ключей:
SELECT constraint_name, column_name FROM information_schema.key_column_usage WHERE table_name = 'имя_таблицы' AND constraint_name IN ( SELECT constraint_name FROM information_schema.table_constraints WHERE constraint_type = 'UNIQUE' );
Рекомендуется использовать фильтры по схеме и таблице для ускорения запросов и точного анализа структуры. Регулярная проверка ограничений и индексов через Information schema позволяет своевременно выявлять потенциальные конфликты и контролировать целостность данных.
Примеры SQL-запросов с Information schema для анализа данных
Использование Information schema позволяет быстро получать структурные данные о базе и строить отчеты. Ниже приведены практические примеры запросов и результаты их выполнения.
1. Получение списка всех таблиц в базе:
SELECT table_schema, table_name, table_type
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema');
Результат можно представить в виде таблицы:
| table_schema | table_name | table_type |
|---|---|---|
| shop | customers | BASE TABLE |
| shop | orders | BASE TABLE |
| shop | products | BASE TABLE |
2. Получение информации о столбцах конкретной таблицы:
SELECT column_name, data_type, character_maximum_length, is_nullable, column_default FROM information_schema.columns WHERE table_name = 'customers';
Пример представления данных:
| column_name | data_type | character_maximum_length | is_nullable | column_default |
|---|---|---|---|---|
| id | int | NULL | NO | NULL |
| name | varchar | 100 | NO | NULL |
| varchar | 150 | YES | NULL |
3. Поиск всех столбцов с определенным типом данных:
SELECT table_name, column_name FROM information_schema.columns WHERE data_type = 'datetime';
4. Проверка ограничений таблицы:
SELECT constraint_name, constraint_type FROM information_schema.table_constraints WHERE table_name = 'orders';
Использование таких запросов позволяет строить динамические схемы базы, проверять соответствие документации и планировать оптимизацию индексов и ограничений.
