目次
- 21.1 INFORMATION_SCHEMA CHARACTER_SETS テーブル
- 21.2 INFORMATION_SCHEMA COLLATIONS テーブル
- 21.3 INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY テーブル
- 21.4 INFORMATION_SCHEMA COLUMNS テーブル
- 21.5 INFORMATION_SCHEMA COLUMN_PRIVILEGES テーブル
- 21.6 INFORMATION_SCHEMA ENGINES テーブル
- 21.7 INFORMATION_SCHEMA EVENTS テーブル
- 21.8 INFORMATION_SCHEMA GLOBAL_STATUS および SESSION_STATUS テーブル
- 21.9 INFORMATION_SCHEMA GLOBAL_VARIABLES および SESSION_VARIABLES テーブル
- 21.10 INFORMATION_SCHEMA KEY_COLUMN_USAGE テーブル
- 21.11 INFORMATION_SCHEMA OPTIMIZER_TRACE テーブル
- 21.12 INFORMATION_SCHEMA PARAMETERS テーブル
- 21.13 INFORMATION_SCHEMA PARTITIONS テーブル
- 21.14 INFORMATION_SCHEMA PLUGINS テーブル
- 21.15 INFORMATION_SCHEMA PROCESSLIST テーブル
- 21.16 INFORMATION_SCHEMA PROFILING テーブル
- 21.17 INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS テーブル
- 21.18 INFORMATION_SCHEMA ROUTINES テーブル
- 21.19 INFORMATION_SCHEMA SCHEMATA テーブル
- 21.20 INFORMATION_SCHEMA SCHEMA_PRIVILEGES テーブル
- 21.21 INFORMATION_SCHEMA STATISTICS テーブル
- 21.22 INFORMATION_SCHEMA TABLES テーブル
- 21.23 INFORMATION_SCHEMA TABLESPACES テーブル
- 21.24 INFORMATION_SCHEMA TABLE_CONSTRAINTS テーブル
- 21.25 INFORMATION_SCHEMA TABLE_PRIVILEGES テーブル
- 21.26 INFORMATION_SCHEMA TRIGGERS テーブル
- 21.27 INFORMATION_SCHEMA USER_PRIVILEGES テーブル
- 21.28 INFORMATION_SCHEMA VIEWS テーブル
- 21.29 InnoDB の INFORMATION_SCHEMA テーブル
- 21.29.1 INFORMATION_SCHEMA INNODB_CMP および INNODB_CMP_RESET テーブル
- 21.29.2 INFORMATION_SCHEMA INNODB_CMP_PER_INDEX および INNODB_CMP_PER_INDEX_RESET テーブル
- 21.29.3 INFORMATION_SCHEMA INNODB_CMPMEM および INNODB_CMPMEM_RESET テーブル
- 21.29.4 INFORMATION_SCHEMA INNODB_TRX テーブル
- 21.29.5 INFORMATION_SCHEMA INNODB_LOCKS テーブル
- 21.29.6 INFORMATION_SCHEMA INNODB_LOCK_WAITS テーブル
- 21.29.7 INFORMATION_SCHEMA INNODB_SYS_TABLES テーブル
- 21.29.8 INFORMATION_SCHEMA INNODB_SYS_INDEXES テーブル
- 21.29.9 INFORMATION_SCHEMA INNODB_SYS_COLUMNS テーブル
- 21.29.10 INFORMATION_SCHEMA INNODB_SYS_FIELDS テーブル
- 21.29.11 INFORMATION_SCHEMA INNODB_SYS_FOREIGN テーブル
- 21.29.12 INFORMATION_SCHEMA INNODB_SYS_FOREIGN_COLS テーブル
- 21.29.13 INFORMATION_SCHEMA INNODB_SYS_TABLESTATS ビュー
- 21.29.14 INFORMATION_SCHEMA INNODB_SYS_DATAFILES テーブル
- 21.29.15 INFORMATION_SCHEMA INNODB_SYS_TABLESPACES テーブル
- 21.29.16 INFORMATION_SCHEMA INNODB_BUFFER_PAGE テーブル
- 21.29.17 INFORMATION_SCHEMA INNODB_BUFFER_PAGE_LRU テーブル
- 21.29.18 INFORMATION_SCHEMA INNODB_BUFFER_POOL_STATS テーブル
- 21.29.19 INFORMATION_SCHEMA INNODB_METRICS テーブル
- 21.29.20 INFORMATION_SCHEMA INNODB_FT_CONFIG テーブル
- 21.29.21 INFORMATION_SCHEMA INNODB_FT_DEFAULT_STOPWORD テーブル
- 21.29.22 INFORMATION_SCHEMA INNODB_FT_INDEX_TABLE テーブル
- 21.29.23 INFORMATION_SCHEMA INNODB_FT_INDEX_CACHE テーブル
- 21.29.24 INFORMATION_SCHEMA INNODB_FT_DELETED テーブル
- 21.29.25 INFORMATION_SCHEMA INNODB_FT_BEING_DELETED テーブル
- 21.30 MySQL Cluster の INFORMATION_SCHEMA テーブル
- 21.31 スレッドプールの INFORMATION_SCHEMA テーブル
- 21.32 SHOW ステートメントの拡張
INFORMATION_SCHEMA
では、データベースメタデータへのアクセスを実現し、データベースまたはテーブルの名前、カラムのデータ型、アクセス権限などの MySQL Server に関する情報を提供します。この情報に使用されることがある別の用語が、データディクショナリとシステムカタログです。
INFORMATION_SCHEMA データベースの使用上の注意
INFORMATION_SCHEMA
は、各 MySQL インスタンス内のデータベースであり、MySQL Server が保持するほかのすべてのデータベースに関する情報を格納する場所です。INFORMATION_SCHEMA
データベースには複数の読み取り専用テーブルが含まれます。これらには実際にはビューがあるので、関連付けられたファイルはなく、トリガーは設定できません。また、その名前を持つデータベースディレクトリもありません。
USE
ステートメントを使用してデフォルトデータベースとして INFORMATION_SCHEMA
を選択できますが、実行できる操作はテーブル内容の読み取りだけで、テーブルに対する INSERT
、UPDATE
、DELETE
操作は実行できません。
例
次に INFORMATION_SCHEMA
から情報を取り出すステートメントの例を示します。
mysql> SELECT table_name, table_type, engine
-> FROM information_schema.tables
-> WHERE table_schema = 'db5'
-> ORDER BY table_name;
+------------+------------+--------+
| table_name | table_type | engine |
+------------+------------+--------+
| fk | BASE TABLE | InnoDB |
| fk2 | BASE TABLE | InnoDB |
| goto | BASE TABLE | MyISAM |
| into | BASE TABLE | MyISAM |
| k | BASE TABLE | MyISAM |
| kurs | BASE TABLE | MyISAM |
| loop | BASE TABLE | MyISAM |
| pk | BASE TABLE | InnoDB |
| t | BASE TABLE | MyISAM |
| t2 | BASE TABLE | MyISAM |
| t3 | BASE TABLE | MyISAM |
| t7 | BASE TABLE | MyISAM |
| tables | BASE TABLE | MyISAM |
| v | VIEW | NULL |
| v2 | VIEW | NULL |
| v3 | VIEW | NULL |
| v56 | VIEW | NULL |
+------------+------------+--------+
17 rows in set (0.01 sec)
説明: このステートメントは、データベース db5
内のすべてのテーブルのリストを要求し、テーブルの名前、種類、ストレージエンジンという 3 つの情報だけを示します。
文字セットの考慮事項
文字カラム (TABLES.TABLE_NAME
など) の定義は、通常、VARCHAR(
であり、ここで N
) CHARACTER SET utf8N
は少なくとも 64 です。MySQL は、このようなカラムでのすべての検索、ソート、比較、およびほかの文字列操作に、この文字セット (utf8_general_ci
) のデフォルトの照合順序を使用します。
一部の MySQL オブジェクトはファイルとして表されるので、INFORMATION_SCHEMA
文字列カラムでの検索は、ファイルシステムでの大文字と小文字の区別によって影響を受けることがあります。詳細は、セクション10.1.7.9「照合順序と INFORMATION_SCHEMA 検索」を参照してください。
SHOW ステートメントの代替方法としての INFORMATION_SCHEMA
SELECT ... FROM INFORMATION_SCHEMA
ステートメントは、MySQL がサポートするさまざまな SHOW
ステートメント (SHOW DATABASES
、SHOW TABLES
など) により提供された情報にアクセスするための一貫性の高い方法として用意されています。SELECT
は、SHOW
に比べて次の利点があります。
すべてのアクセスがテーブル上で行われるので、Codd のルールに準拠しています。
SELECT
ステートメントの使い慣れた構文を使用でき、学習が必要なものは一部のテーブルおよびカラムの名前だけです。実装者はキーワードの追加を心配する必要がありません。
INFORMATION_SCHEMA
クエリーからの結果をフィルタリング、ソート、連結でき、構文解析するデータ構造やテキスト表現など、アプリケーションで必要なあらゆる形式に変換できます。この手法は、ほかのデータベースシステムとの相互運用可能性に優れています。たとえば、Oracle Database ユーザーは、Oracle データディクショナリのテーブルのクエリーに慣れています。
SHOW
はよく知られ、広く使用されているので、SHOW
ステートメントは引き続き代替方法として有効です。実際、セクション21.32「SHOW ステートメントの拡張」で説明しているように、INFORMATION_SCHEMA
の実装に伴い、SHOW
に拡張が行われています。
権限
各 MySQL ユーザーには、これらのテーブルへのアクセス権がありますが、ユーザーが適切なアクセス権限を持つオブジェクトに対応したテーブル内の行だけを表示できます。一部の場合 (たとえば INFORMATION_SCHEMA.ROUTINES
テーブル内の ROUTINE_DEFINITION
カラム) では、権限が不足しているユーザーには NULL
と表示されます。これらの制限は InnoDB
テーブルには適用されません。PROCESS
権限だけがあればこれらを表示できます。
同じ権限が、INFORMATION_SCHEMA
からの情報の選択と、SHOW
ステートメントを通じた同じ情報の表示に適用されます。どちらの場合でも、オブジェクトに関する情報を表示するには、そのオブジェクトに対する何らかの権限が必要です。
パフォーマンスに関する考慮事項
複数のデータベースの情報を検索する INFORMATION_SCHEMA
クエリーは、長時間かかり、パフォーマンスに影響を及ぼす可能性があります。クエリーの効率を確認するには、EXPLAIN
を使用できます。EXPLAIN
出力を使用した INFORMATION_SCHEMA
クエリーの調整に関する詳細は、セクション8.2.4「INFORMATION_SCHEMA クエリーの最適化」を参照してください。
標準に関する考慮事項
MySQL での INFORMATION_SCHEMA
テーブル構造の実装は ANSI/ISO SQL:2003 標準パート 11 の Schemata に準拠しています。SQL:2003 の中核機能の F021 基本情報スキーマにほぼ準拠することを意図しています。
SQL Server 2000 (これも標準に準拠しています) のユーザーであれば、非常に類似していることがわかるでしょう。ただし、MySQL では実装に関連しない多くのカラムを省略し、MySQL 固有のカラムを追加しています。このようなカラムの 1 つが、INFORMATION_SCHEMA.TABLES
テーブル内の ENGINE
カラムです。
ほかの DBMS では syscat
や system
などのさまざまな名前を使用していますが、標準の名前は INFORMATION_SCHEMA
です。
標準または DB2、SQL Server、Oracle で予約されている名前を使用しないように、「MySQL 拡張」のマークを付けて一部のカラムの名前を変更しています。(たとえば、TABLES
テーブルでの COLLATION
を TABLE_COLLATION
に変更しました。)https://web.archive.org/web/20070428032454/http://www.dbazine.com/db2/db2-disarticles/gulutzan5 の記事の末尾近くにある予約語のリストを参照してください。
INFORMATION_SCHEMA 参照セクションでの規則
次のセクションでは、INFORMATION_SCHEMA
でのテーブルおよびカラムのそれぞれについて説明します。カラムごとに次の 3 つの情報があります。
「
INFORMATION_SCHEMA
名」には、INFORMATION_SCHEMA
テーブルのカラムの名前が示されます。これは、「備考」フィールドで「MySQL 拡張」と記されていないかぎり、標準の SQL 名に一致します。「
SHOW
名」には、もっとも近いSHOW
ステートメントに同等のフィールド名がある場合は、この名前が示されます。「備考」には、必要に応じて追加情報が記されます。このフィールドが
NULL
の場合、カラムの値が常にNULL
であることを意味します。このフィールドに「MySQL 拡張」とある場合、そのカラムは標準 SQL に対する MySQL 拡張です。
多くのセクションは、どの SHOW
ステートメントが、INFORMATION_SCHEMA
から情報を取得する SELECT
と同等であるかを示します。デフォルトデータベースの情報を表示する SHOW
ステートメントでは、FROM
句を省略した場合、db_name
INFORMATION_SCHEMA
テーブルから情報を取得するクエリーの WHERE
句に AND TABLE_SCHEMA = SCHEMA()
条件を追加すると、デフォルトデータベースの情報を選択できます。
InnoDB
ストレージエンジンに固有の INFORMATION_SCHEMA
テーブルの詳細は、セクション21.29「InnoDB の INFORMATION_SCHEMA テーブル」を参照してください。スレッドプールプラグインに固有の INFORMATION_SCHEMA
テーブルの詳細は、セクション21.31「スレッドプールの INFORMATION_SCHEMA テーブル」を参照してください。
INFORMATION_SCHEMA
データベースに関するよくある質問とその回答については、セクションA.7「MySQL 5.6 FAQ: INFORMATION_SCHEMA」を参照してください。