Онлайн библиотека PLAM.RU


Глава 9. База данных INFORMATION_SCHEMA

INFORMATION_SCHEMA обеспечивает доступ к метаданным базы данных.

Метаданные представляют собой данные относительно данных, имени базы данных или таблицы, тип данных столбца или привилегии доступа. Другие термины, которые иногда используются для этой информации: каталог системы и словарь данных.

INFORMATION_SCHEMA информационная база данных, место, которое сохраняет информацию относительно всех других баз данных, которые поддерживает сервер MySQL. Внутри INFORMATION_SCHEMA имеется несколько таблиц только для чтения. Они фактически view, а не обычные таблицы, так как не имеется никаких файлов, связанных с ними.

В действительности мы имеем базу данных INFORMATION_SCHEMA, хотя сервер не создает каталог баз данных с таким именем. Возможно выбрать INFORMATION_SCHEMA как заданную по умолчанию базу данных инструкцией USE, но это возможно только, чтобы читать содержание таблиц. Вы не можете вставлять в них, модифицировать их или удалять из них.

Имеется пример инструкции, которая получает информацию из INFORMATION_SCHEMA:


mysql> SELECT table_name, table_type, engine

– > FROM information_schema.tables

– > WHERE table_schema = 'db5' ORDER BY table_name DESC;

+------------+------------+--------+

| table_name | table_type | engine |

+------------+------------+--------+

| v56 | VIEW | NULL |

| v3 | VIEW | NULL |

| v2 | VIEW | NULL |

| v | VIEW | NULL |

| tables | BASE TABLE | MyISAM |

| t7 | BASE TABLE | MyISAM |

| t3 | BASE TABLE | MyISAM |

| t2 | BASE TABLE | MyISAM |

| t | BASE TABLE | MyISAM |

| pk | BASE TABLE | InnoDB |

| loop | BASE TABLE | MyISAM |

| kurs | BASE TABLE | MyISAM |

| k | BASE TABLE | MyISAM |

| into | BASE TABLE | MyISAM |

| goto | BASE TABLE | MyISAM |

| fk2 | BASE TABLE | InnoDB |

| fk | BASE TABLE | InnoDB |

+------------+------------+--------+

17 rows in set (0.01 sec)


Объяснение: инструкция запрашивает список всех таблиц в базе данных db5 в обратном алфавитном порядке, показывая только три части информации: имя таблицы, тип таблицы и тип памяти.

Каждый пользователь MySQL имеет право обратиться к этим таблицам, но может видеть только строки в таблицах, которые соответствуют объектам, для которых пользователь имеет соответствующие привилегии доступа. В некоторых случаях (например, столбец ROUTINE_DEFINITION в таблице INFORMATION_SCHEMA.ROUTINES), пользователи, которые имеют недостаточные привилегии, будут видеть NULL.

Инструкция SELECT … FROM INFORMATION_SCHEMA предназначена как более непротиворечивый способ обеспечить доступ к информации, обеспеченной различными инструкциями SHOW, которые MySQL поддерживает (SHOW DATABASES, SHOW TABLES и им подобные). Использование SELECT имеет эти преимущества перед SHOW:


Это соответствует правилам Кодда. То есть, весь доступ выполнен на таблицах.


Никто не должен узнавать новый операторный синтаксис. Потому что они уже знают, как работает SELECT, они должны узнать только объектные имена.


Реализаторы не должны волноваться относительно добавления ключевых слов.


Имеются миллионы возможных изменений вывода вместо одного. Это обеспечивает большее количество гибкости для прикладных программ, которые имеют изменяющиеся требования относительно метаданных, в которых они нуждаются.


Миграция проще, потому что каждая другая СУБД понимает этот способ.

Однако, потому что команды SHOW популярна у пользователей MySQL, никто их убирать не собирается. Фактически, наряду с реализацией INFORMATION_SCHEMA, имеются расширения для SHOW.

Не имеется никакого различия между привилегиями, требуемыми для инструкций SHOW и нужными, чтобы выбрать информацию из INFORMATION_SCHEMA. В любом случае Вы должны иметь некоторую привилегию на объекте, чтобы видеть информацию относительно этого объекта.

Реализация структур таблицы INFORMATION_SCHEMA в MySQL следует ANSI/ISO SQL:2003 Part 11 Schemata и в основном отвечает стандарту SQL:2003 core feature F021 Basic information schema.

Пользователи SQL Server 2000 (который также следует стандарту) могут обратить внимание на сильное сходство. Однако, MySQL опустил много столбцов, которые нерелевантными для этой реализации, и добавил столбцы, которые являются MySQL-специфическими. Один такой столбец: ENGINE в таблице INFORMATION_SCHEMA.TABLES.

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


INFORMATION_SCHEMA Name указывает имя для столбца в таблице INFORMATION_SCHEMA. Это не соответствует стандартному имени SQL, если в поле Remarks значится MySQL extension.


SHOW Name указывает эквивалентное имя поля в самой близкой инструкции SHOW, если она имеется.


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

Чтобы избегать использовать любое имя, которое зарезервировано в стандарте SQL, DB2 или Oracle, имена некоторых столбцов, отмеченных как MySQL extension переделаны. Например, COLLATION на TABLE_COLLATION в таблице TABLES. Ссписок зарезервированных слов изложен в конце статьи на http://www.dbazine.com/gulutzan5.shtml.

Определение для символьных столбцов (например, TABLES.TABLE_NAME) вообще VARCHAR(N) CHARACTER SET utf8, где N по крайней мере 64.

Каждый раздел указывает то, какая инструкция SHOW является эквивалентной SELECT, который собирает информацию из INFORMATION_SCHEMA, если имеется такая инструкция.

Обратите внимание: в настоящее время, имеются некоторые столбцы, расставленные не по порядку, а кое-какие еще вообще отсутствуют.









Главная | Контакты | Нашёл ошибку | Прислать материал | Добавить в избранное

Все материалы представлены для ознакомления и принадлежат их авторам.