目次
INFORMATION_SCHEMA SCHEMATA
テーブルINFORMATION_SCHEMA TABLES
テーブルINFORMATION_SCHEMA COLUMNS
テーブルINFORMATION_SCHEMA STATISTICS
テーブルINFORMATION_SCHEMA USER_PRIVILEGES
テーブルINFORMATION_SCHEMA SCHEMA_PRIVILEGES
テーブルINFORMATION_SCHEMA TABLE_PRIVILEGES
テーブルINFORMATION_SCHEMA COLUMN_PRIVILEGES
テーブルINFORMATION_SCHEMA CHARACTER_SETS
テーブルINFORMATION_SCHEMA COLLATIONS
テーブルINFORMATION_SCHEMA
COLLATION_CHARACTER_SET_APPLICABILITY
テーブルINFORMATION_SCHEMA TABLE_CONSTRAINTS
テーブルINFORMATION_SCHEMA KEY_COLUMN_USAGE
テーブルINFORMATION_SCHEMA ROUTINES
テーブルINFORMATION_SCHEMA VIEWS
テーブルINFORMATION_SCHEMA TRIGGERS
テーブルINFORMATION_SCHEMA PLUGINS
テーブルINFORMATION_SCHEMA ENGINES
テーブルINFORMATION_SCHEMA PARTITIONS
テーブルINFORMATION_SCHEMA EVENTS
テーブルINFORMATION_SCHEMA FILES
テーブルINFORMATION_SCHEMA PROCESSLIST
テーブルINFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS
テーブルINFORMATION_SCHEMA GLOBAL_STATUS
および
SESSION_STATUS
テーブルINFORMATION_SCHEMA GLOBAL_VARIABLES
および
SESSION_VARIABLES
テーブルINFORMATION_SCHEMA
テーブルSHOW
ステートメントへの拡張
INFORMATION_SCHEMA
はデータベース
メタデータへのアクセスを提供します。
メタデータ は、データベース名またはテーブル名、カラムのデータタイプ、あるいはアクセス権限などのデータに関するデータです。この情報に時々使用される他の用語にはデータ ディクショナリおよびシステム カタログがあります。
INFORMATION_SCHEMA
は情報のデータベースで、MySQL
サーバーが保持する他のすべてのデータベースに関する情報を保存しています。INFORMATION_SCHEMA
の中にはいくつかの読み出し専用テーブルがあります。それらは実際はベーステーブルではなく表示ですので、それらに関連付けされたファイルはありません。
実際には 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
内のすべてのテーブルのリストを要求し、アルファベットの逆の順序で、次の
3
項目の情報を表示します。テーブル名、テーブルタイプ、およびそのストレージ
エンジン。
各 MySQL
ユーザーはこれらのテーブルへのアクセス権限がありますが、ユーザーが適切なアクセス権限を持つオブジェクトに一致するテーブルの行のみ表示することができます。しかし、場合によっては
(例えば、INFOMATION_SCHEMA.ROUTINES
テーブルの ROUTINE_DEFINITION
カラム)、不十分な権限を有するユーザーには
NULL
が表示される場合があります。
SELECT ...FROM INFORMATION_SCHEMA
ステートメントは様々なSHOW
ステートメント、つまり MySQL がサポートする
( SHOW DATABASES
、SHOW
TABLES
、など
により提供された情報へのアクセスをさらに一貫した手法を意図したものです。SELECT
は、 SHOW
に比べて有利な点が 3
つあります。
それは Codd の規則に合致していることです。つまり、すべてのアクセスはテーブルで行われます。
新しいステートメント構文を学ぶ必要はありません。なぜなら既にSELECT
の機能を理解されており、オブジェクト名を知るだけでいいからです。
インプリメンターはキーワードを加える心配する必要がありません。
たった 1 つの出力に代わり、可能な出力は無数にあります。これによりメタデータに対する多様な要件を持つアプリケーションにさらに軟性を提供します。
すべての他の DBMS が同じ手法を用いていますので移行は容易です。
しかし、SHOW
は MySQL
の従業員やユーザーに評判がよく、また無くなったら混乱することが考えられれため、従来の構文の利点だけでは
SHOW
を無くすのに十分な理由とはいえません。実際のところ、INFORMATION_SCHEMA
を実装することによって、SHOW
もまた同様に強化されます。これらのことは
項21.27. 「SHOW
ステートメントへの拡張」 で説明しています。
SHOW
ステートメントに必要な権限と
INFORMATION_SCHEMA
から情報を選択する権限の間には違いはありません。どちらの場合でも、オブジェクトに関する情報を表示するにはいくつかの権限を有する必要があります。
MySQL での INFORMATION_SCHEMA
テーブル構成のインプリメンテーションは ANSI/ISO
SQL:2003 標準 パート 11 の Schemata
に準拠しています。SQL:2003 コア機能 F021
基本情報スキーマに最大限準拠することを意図しています。
SQL サーバ 2000 (標準に準拠)
のユーザーは非常に近い類似性を認める事でしょう。しかし、MySQL
ではインプリメンテーションに関連しない多くのカラムを割愛し、MySQL
特化のカラムを追加しています。それらの追加されたカラムの
1 つが ENGINE
カラムで
INFORMATION_SCHEMA.TABLES
テーブルにあります。
他の DBMS は syscat
あるいはシステム
などの様々な名前を使用していますが、標準の名前は
INFORMATION_SCHEMA
です。
以下の項で INFORMATION_SCHEMA
の各テーブルおよびカラムについて説明します。各カラムに対し、3
項目の情報があります。
「INFORMATION_SCHEMA
名」は
INFORMATION_SCHEMA
テーブルのカラム名を意味します。これは「備考」欄で
「MySQL 拡張」に触れない限り標準の SQL
名に一致します。
「「SHOW
名」 」は SHOW
名がある場合に近接する SHOW
ステートメントの相当するフィールド名を意味します。
「備考」は必要に応じて追加の情報を提供します。この領域が
NULL
の場合、カラムの値は常に
NULL
をであることを意味します。この領域に
「MySQL 拡張」
の事が書かれている場合、そのカラムは標準の
SQL に対する MySQL 拡張です。
標準あるいは DB2、SQL サーバ、または Oracle
に保持されている名前の使用しないように、
「MySQL 拡張」
の印の付いたカラムの名前を変更しています。(例えば、TABLES
のテーブルでは COLLATION
を
TABLE_COLLATION
に変更しています。)本件の最後にある予約した単語のリストを参照してください。
http://www.dbazine.com/gulutzan5.shtml.
文字列の定義
(例えば、TABLES.TABLE_NAME
)
は一般的には VARCHAR(
で、そこでは
N
)
CHARACTER SET utf8N
は少なくとも 64 です。MySQL
はこの文字セット (utf8_general_ci
)
をそのようなカラムのすべての検索、分類、比較、および他の文字列の操作に使用しています。デフォルトの照合がニーズを満たさない場合、COLLATE
節 (項9.5.1. 「SQLステートメントCOLLATE
節を使用する」)
で適切な照合を使用することができます。
各セクションはそのようなステートメントがある場合どの
SHOW
ステートメントが
INFOMATION_SCHEMA
から情報を取り出す
SELECT
に一致するかを示します。
注:現在、いくつかの不明なカラムおよび適切でないカラムがあります。現在この作業に携わっており変更があり次第変更を加えて文書を更新しています。
INFORMATION_SCHEMA
データベースに関するよく出される質問の答えに関しては、
項A.8. 「MySQL 5.0 FAQ — INFORMATION_SCHEMA
」
を参照してください。