Что представляет собой база данных information_schema? - PullRequest
21 голосов
/ 16 июня 2010

У меня есть одна база данных в MySQL.

Но когда я захожу в phpMyAdmin, он показывает другую базу данных с именем information_schema.

Эта база данных всегда присутствует с одной базой данных?

Я хочу сказать, есть ли копия information_schema для каждой базы данных, присутствующей в mysql, или есть одна база данных с именем inforemation_schema для каждого сервера mysql?

Если я изменю эту базу данных information_schema, как это повлияет на мою текущую базу данных?

1 Ответ

27 голосов
/ 16 июня 2010

Информационную_схему можно рассматривать как «основную базу данных», которая содержит сведения обо всех других базах данных на сервере, таких как имена и типы таблиц, столбцов и пользователей.

Что такое информационная_схема?

С справочная документация:

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

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

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

Что хранится в information_schema?

Вы можете видеть виды вещей, хранящихся в information_schema,и способ их организации, просмотрев эту диаграмму (для MySQL 5.0) или эту диаграмму (для MySQL 5.1).

Что произойдет, если я изменюinformation_schema?

На самом деле information_schema представляет собой набор представлений, доступных только для чтения.Таким образом, должно быть невозможно изменить его и нанести какой-либо ущерб.Тем не менее, MySQL FAQ по этой теме содержит следующее:

23.7.3: можно ли добавлять или иным образом изменять таблицы, найденные в базе данных INFORMATION_SCHEMA?

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

Это подразумевает, что, если вы обнаружите, что можете изменить информационную_схему (которая должна быть невозможной иMySQL, но реализации SQL других производителей могут это позволить), по крайней мере, вы должны отказаться.Если бы вы могли повредить / изменить information_schema, вы бы повредили фактическую структуру (например, имена таблиц, типы столбцов) других ваших баз данных.

У каждого пользователя есть своя собственная копия information_schema?

Каждый пользователь может видеть информационную схему, которая относится к таблицам и базам данных, к которым он имеет доступ.Некоторые пользователи с сильно ограниченными правами по-прежнему будут видеть информационную_схему, но будут видеть только значения NULL для любых запросов информационной_схемы.Однако важно помнить, что information_schema - это не фактическая база данных, а просто удобный способ, предоставляемый SQL, чтобы вы могли выбирать информацию о ваших базах данных и таблицах.

Из справочная документация:

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

Где я могу найти дополнительную информацию?

...