information_schemaは、テーブル、列、ユーザーの名前や種類など、サーバー上の他のすべてのデータベースに関する詳細を保持する「マスターデータベース」と考えることができます。
information_schemaとは何ですか?
リファレンスドキュメントから:
INFORMATION_SCHEMAは、データベースメタデータへのアクセスを提供します。
メタデータは、データベースまたはテーブルの名前、列のデータ型、アクセス権などのデータに関するデータです。この情報に使用されることがある他の用語は、データディクショナリとシステムカタログです。
INFORMATION_SCHEMAは情報データベースであり、MySQLサーバーが維持する他のすべてのデータベースに関する情報を格納する場所です。INFORMATION_SCHEMA内には、いくつかの読み取り専用テーブルがあります。これらは実際にはビューであり、ベーステーブルではないため、それらに関連付けられたファイルはありません。
information_schemaには何が保存されていますか?
この図(MySQL 5.0の場合)またはこの図(MySQL 5.1の場合)を表示すると、information_schemaに格納されているものの種類とその編成方法を確認できます。
information_schemaを変更するとどうなりますか?
実際には、information_schemaは読み取り専用ビューのコレクションです。そのため、それを変更して損傷を与えることは不可能であるはずです。ただし、このトピックに関するMySQL FAQには、次のように書かれています。
23.7.3:INFORMATION_SCHEMAデータベースにあるテーブルを追加または変更できますか?
いいえ。アプリケーションは特定の標準構造に依存している可能性があるため、これを変更しないでください。このため、INFORMATION_SCHEMAテーブルまたはデータの変更に起因するバグやその他の問題をサポートすることはできません。
これは、information_schemaを変更できる場合(これは不可能であり、MySQLにありますが、SQLの他のベンダー実装では許可されている可能性があります)、少なくとも変更しないことを選択する必要があることを意味します。information_schemaを損傷/変更する可能性がある場合は、他のデータベースの実際の構造(テーブル名、列タイプなど)を損傷することになります。
すべてのユーザーが独自のinformation_schemaのコピーを持っていますか?
各ユーザーは、アクセスできるテーブルとデータベースに関連するinformation_schemaを表示できます。権限が大幅に制限されている一部のユーザーには、引き続きinformation_schemaが表示されますが、information_schemaクエリの場合はNULL値のみが表示されます。ただし、information_schemaは実際のデータベースではなく、データベースとテーブルに関する情報を選択できるようにSQLが提供する便利な方法であることを覚えておくことが重要です。
リファレンスドキュメントから:
各MySQLユーザーにはこれらのテーブルにアクセスする権利がありますが、ユーザーが適切なアクセス権限を持っているオブジェクトに対応するテーブル内の行のみを表示できます。場合によっては(たとえば、INFORMATION_SCHEMA.ROUTINESテーブルのROUTINE_DEFINITION列)、権限が不十分なユーザーにはNULLが表示されます。
詳細情報はどこにありますか?