目次
- 21.1.
INFORMATION_SCHEMA SCHEMATAテーブル - 21.2.
INFORMATION_SCHEMA TABLESテーブル - 21.3.
INFORMATION_SCHEMA COLUMNSテーブル - 21.4.
INFORMATION_SCHEMA STATISTICSテーブル - 21.5.
INFORMATION_SCHEMA USER_PRIVILEGESテーブル - 21.6.
INFORMATION_SCHEMA SCHEMA_PRIVILEGESテーブル - 21.7.
INFORMATION_SCHEMA TABLE_PRIVILEGESテーブル - 21.8.
INFORMATION_SCHEMA COLUMN_PRIVILEGESテーブル - 21.9.
INFORMATION_SCHEMA CHARACTER_SETSテーブル - 21.10.
INFORMATION_SCHEMA COLLATIONSテーブル - 21.11.
INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITYテーブル - 21.12.
INFORMATION_SCHEMA TABLE_CONSTRAINTSテーブル - 21.13.
INFORMATION_SCHEMA KEY_COLUMN_USAGEテーブル - 21.14.
INFORMATION_SCHEMA ROUTINESテーブル - 21.15.
INFORMATION_SCHEMA VIEWSテーブル - 21.16.
INFORMATION_SCHEMA TRIGGERSテーブル - 21.17.
INFORMATION_SCHEMA PLUGINSテーブル - 21.18.
INFORMATION_SCHEMA ENGINESテーブル - 21.19.
INFORMATION_SCHEMA PARTITIONSテーブル - 21.20.
INFORMATION_SCHEMA EVENTSテーブル - 21.21.
INFORMATION_SCHEMA FILESテーブル - 21.22.
INFORMATION_SCHEMA PROCESSLISTテーブル - 21.23.
INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTSテーブル - 21.24.
INFORMATION_SCHEMA GLOBAL_STATUSおよびSESSION_STATUSテーブル - 21.25.
INFORMATION_SCHEMA GLOBAL_VARIABLESおよびSESSION_VARIABLESテーブル - 21.26. その他の
INFORMATION_SCHEMAテーブル - 21.27.
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
もまた同様に強化されます。これらのことは
「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
節 (「SQLステートメントCOLLATE節を使用する」)
で適切な照合を使用することができます。
各セクションはそのようなステートメントがある場合どの
SHOW ステートメントが
INFOMATION_SCHEMA から情報を取り出す
SELECT に一致するかを示します。
注:現在、いくつかの不明なカラムおよび適切でないカラムがあります。現在この作業に携わっており変更があり次第変更を加えて文書を更新しています。
INFORMATION_SCHEMA
データベースに関するよく出される質問の答えに関しては、
「MySQL 5.0 FAQ — INFORMATION_SCHEMA」
を参照してください。
スキーマはデータベースで、SCHEMATA
テーブルはデータベースに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
CATALOG_NAME | NULL | |
SCHEMA_NAME | データベース | |
DEFAULT_CHARACTER_SET_NAME | ||
DEFAULT_COLLATION_NAME | ||
SQL_PATH | NULL |
以下のステートメントは等価です。
SELECT SCHEMA_NAME AS `Database` FROM INFORMATION_SCHEMA.SCHEMATA [WHERE SCHEMA_NAME LIKE 'wild'] SHOW DATABASES [LIKE 'wild']
TABLES
テーブルはデータベースのテーブルに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | Table_... | |
TABLE_NAME | Table_... | |
TABLE_TYPE | ||
ENGINE | Engine | MySQL 拡張 |
VERSION | Version | MySQL 拡張 |
ROW_FORMAT | Row_format | MySQL 拡張 |
TABLE_ROWS | Rows | MySQL 拡張 |
AVG_ROW_LENGTH | Avg_row_length | MySQL 拡張 |
DATA_LENGTH | Data_length | MySQL 拡張 |
MAX_DATA_LENGTH | Max_data_length | MySQL 拡張 |
INDEX_LENGTH | Index_length | MySQL 拡張 |
DATA_FREE | Data_free | MySQL 拡張 |
AUTO_INCREMENT | Auto_increment | MySQL 拡張 |
CREATE_TIME | Create_time | MySQL 拡張 |
UPDATE_TIME | Update_time | MySQL 拡張 |
CHECK_TIME | Check_time | MySQL 拡張 |
TABLE_COLLATION | Collation | MySQL 拡張 |
CHECKSUM | Checksum | MySQL 拡張 |
CREATE_OPTIONS | Create_options | MySQL 拡張 |
TABLE_COMMENT | Comment | MySQL 拡張 |
注:
TABLE_SCHEMAおよびTABLE_NAMEはSHOWディスプレーの単一の領域で、例えばTable_in_db1のようになります。TABLE_TYPEはBASE TABLEあるいはVIEWになります。テーブルがテンポラリーの場合、TABLE_TYPE=TEMPORARYになります。(テンポラリーな表示はないため、不明瞭になることはありません。)分割したテーブルの場合、MySQL 5.1.9 で始めると、
ENGINEカラムはすべての分割で使用されるストレージ エンジン名を表示します。(以前は、このカラムはそのようなテーブルにPARTITIONを表示していました。TABLE_ROWSカラムはテーブルがINFORMATION_SCHEMAのデータベースにある場合はNULLです。InnoDBテーブルは、行カウントは SQL の最適化で使用される単なる大雑把な予測です。というのは、
NDBCLUSTERストレージ エンジンを使用しているテーブルは、MySQL 5.1.12 で始まり、DATA_LENGTHカラムが可変幅カラムの真のストレージ量を表します。(Bug #18413 参照)注:なぜなら MySQL クラスターは可変幅カラムにストレージを各 32Kバイトで 10 ページ割り当てるため、そのようなカラムのスペースの使用は 320 KB の増分になります。
テーブルのデフォルトの文字セットには何もありません。
TABLE_COLLATIONは閉じています。なぜなら照合名は文字セット名で始まるからです。MySQL 5.1.9 を起動すると、
CREATE_OPTIONSカラムはテーブルが分割されている場合partitionedを表示します。
以下のステートメントは等価です。
SELECT table_name FROM INFORMATION_SCHEMA.TABLES [WHERE table_schema = 'db_name'] [WHERE|AND table_name LIKE 'wild'] SHOW TABLES [FROMdb_name] [LIKE 'wild']
COLUMNS
テーブルはテーブルのカラムに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | Field | |
ORDINAL_POSITION | 注を参照 | |
COLUMN_DEFAULT | Default | |
IS_NULLABLE | Null | |
DATA_TYPE | Type | |
CHARACTER_MAXIMUM_LENGTH | Type | |
CHARACTER_OCTET_LENGTH | ||
NUMERIC_PRECISION | Type | |
NUMERIC_SCALE | Type | |
CHARACTER_SET_NAME | ||
COLLATION_NAME | Collation | |
COLUMN_TYPE | Type | MySQL 拡張 |
COLUMN_KEY | Key | MySQL 拡張 |
EXTRA | Extra | MySQL 拡張 |
COLUMN_COMMENT | Comment | MySQL 拡張 |
注:
SHOWでは、Type表示は異なるいくつかのCOLUMNSカラムの値を含んでいます。ORDINAL_POSITIONはORDER BY ORDINAL_POSITIONをいう場合があり場合がありますので必要です。SHOWとは異なり、SELECTには自動オーダーリングはありません。CHARACTER_OCTET_LENGTHは、マルチバイトの文字セットを除いてはCHARACTER_MAXIMUM_LENGTHと同じでなければなりません。CHARACTER_SET_NAMEはCollationから得られます。例えば、SHOW FULL COLUMNS FROM tという場合、Collationカラムにlatin1_swedish_ciの値が表示されます。文字セットは最初のアンダースコアの前の部分、つまりlatin1です。
以下のステートメントはほぼ等価です。
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] [AND column_name LIKE 'wild'] SHOW COLUMNS FROMtbl_name[FROMdb_name] [LIKE 'wild']
STATISTICS テーブルはテーブル
インデックスの情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | = データベース | |
TABLE_NAME | Table | |
NON_UNIQUE | Non_unique | |
INDEX_SCHEMA | = Database | |
INDEX_NAME | Key_name | |
SEQ_IN_INDEX | Seq_in_index | |
COLUMN_NAME | Column_name | |
COLLATION | Collation | |
CARDINALITY | Cardinality | |
SUB_PART | Sub_part | MySQL 拡張 |
PACKED | Packed | MySQL 拡張 |
NULLABLE | Null | MySQL 拡張 |
INDEX_TYPE | Index_type | MySQL 拡張 |
COMMENT | Comment | MySQL 拡張 |
注:
インデックスには標準のテーブルはありません。前のリストは SQL サーバ 2000 が
sp_statisticsに返すものと、QUALIFIERをCATALOGに、OWNERをSCHEMAに置き換えた事を除いては類似しています。明らかに、前のテーブルおよび
SHOW INDEXの出力は同じ親に由来しています。ですから相関関係は既に閉じています。
以下のステートメントは等価です。
SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_name = 'tbl_name' [AND table_schema = 'db_name'] SHOW INDEX FROMtbl_name[FROMdb_name]
USER_PRIVILEGESテーブルはグルーバル権限に関する情報を提供します。この情報は
mysql.user
グラントテーブルにあります。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
GRANTEE | '
値、MySQL 拡張 | |
TABLE_CATALOG | NULL, MySQL 拡張 | |
PRIVILEGE_TYPE | MySQL 拡張 | |
IS_GRANTABLE | MySQL 拡張 |
注:
これは非標準のテーブルです。その値は
mysql.userのテーブルにあります。
SCHEMA_PRIVILEGES
テーブルはスキーマ(データベース)
権限に関する情報を提供します。この情報は
mysql.user
グラントテーブルにあります。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
GRANTEE | '
値、MySQL 拡張 | |
TABLE_CATALOG | NULL, MySQL 拡張 | |
TABLE_SCHEMA | MySQL 拡張 | |
PRIVILEGE_TYPE | MySQL 拡張 | |
IS_GRANTABLE | MySQL 拡張 |
注:
これは非標準のテーブルです。その値は
mysql.dbテーブルにあります。
TABLE_PRIVILEGES
テーブルはテーブル権限に関する情報を提供します。この情報は
mysql.tables_priv グラント
テーブルにあります。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
GRANTEE | '
値 | |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
PRIVILEGE_TYPE | ||
IS_GRANTABLE |
注:
PRIVILEGE_TYPEはこれらの値の 1 つ(1 つのみ)を含むことができます。SELECT、INSERT、UPDATE、REFERENCES、ALTER、INDEX、DROP、CREATE VIEW。
以下のステートメントは等価ではありません。
SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES SHOW GRANTS ...
COLUMN_PRIVILEGES
テーブルはカラムの権限に関する情報を提供します。この情報は
mysql.columns_priv グラント
テーブルにあります。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
GRANTEE | '
値 | |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | ||
PRIVILEGE_TYPE | ||
IS_GRANTABLE |
注:
SHOW FULL COLUMNSの出力では、権限はすべて 1 つの領域にあり小文字です。例えば、select,insert,update,references。COLUMN_PRIVILEGESでは、行ごとに 1 つの権限があり、大文字です。PRIVILEGE_TYPEはこれらの値の 1 つ(1 つのみ)を含むことができます。SELECT、INSERT、UPDATE、REFERENCES。ユーザーに
GRANT OPTIONの権限がある場合、IS_GRANTABLEはYESになります。権限が無い場合、IS_GRANTABLEはNOになります。その出力はGRANT OPTIONを個別の権限としてリストしません。
以下のステートメントは等価ではありません。
SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES SHOW GRANTS ...
CHARACTER_SETS
テーブルは利用できる文字セットに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
CHARACTER_SET_NAME | Charset | |
DEFAULT_COLLATE_NAME | Default collation | |
DESCRIPTION | Description | MySQL 拡張 |
MAXLEN | Maxlen | MySQL 拡張 |
以下のステートメントは等価です。
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS [WHERE name LIKE 'wild'] SHOW CHARACTER SET [LIKE 'wild']
COLLATIONS
テーブルは各文字セットの照合に関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
COLLATION_NAME | Collation | |
CHARACTER_SET_NAME | Charset | MySQL 拡張 |
ID | Id | MySQL 拡張 |
IS_DEFAULT | Default | MySQL 拡張 |
IS_COMPILED | Compiled | MySQL 拡張 |
SORTLEN | Sortlen | MySQL 拡張 |
以下のステートメントは等価です。
SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS [WHERE collation_name LIKE 'wild'] SHOW COLLATION [LIKE 'wild']
COLLATION_CHARACTER_SET_APPLICABILITY
テーブルはどの文字セットがどの照合に適用できるかを示します。カラムは
SHOW COLLATION から取得する最初の 2
つの表示領域に等価です。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
COLLATION_NAME | Collation | |
CHARACTER_SET_NAME | Charset |
TABLE_CONSTRAINTS
テーブルはどのテーブルに制約があるかを説明します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
CONSTRAINT_CATALOG | NULL | |
CONSTRAINT_SCHEMA | ||
CONSTRAINT_NAME | ||
TABLE_SCHEMA | ||
TABLE_NAME | ||
CONSTRAINT_TYPE |
注:
CONSTRAINT_TYPE値はUNIQUE、PRIMARY KEY、あるいはFOREIGN KEYになります。UNIQUEおよびPRIMARY KEY情報はNon_unique領域が0のときSHOW INDEXの出力のKey_name領域から得られる情報とほぼ同じになります。CONSTRAINT_TYPEカラムはこれらの値のどれか 1 つを含みます。UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK。これはCHAR(非ENUM) カラムです。CHECK値はCHECKをサポートするまでは利用できません。
KEY_COLUMN_USAGE
テーブルはどのキーカラムがに制約があるかを説明します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
CONSTRAINT_CATALOG | NULL | |
CONSTRAINT_SCHEMA | ||
CONSTRAINT_NAME | ||
TABLE_CATALOG | ||
TABLE_SCHEMA | ||
TABLE_NAME | ||
COLUMN_NAME | ||
ORDINAL_POSITION | ||
POSITION_IN_UNIQUE_CONSTRAINT | ||
REFERENCED_TABLE_SCHEMA | ||
REFERENCED_TABLE_NAME | ||
REFERENCED_COLUMN_NAME |
注:
制約が外部キーの場合、これは外部キーのカラムで、外部キーが参照するカラムではありません。
ORDINAL_POSITIONの値は制約内のカラムの位置で、テーブル内のカラムの位置ではありません。カラムの位置には 1 から始まる番号が付いています。POSITION_IN_UNIQUE_CONSTRAINTの値は一意およびプライマリ キー制約に対しNULLです。外部キーの制約では、参照されるテーブルのキーの順序です。例えば、以下の定義を有する 2 つのテーブル名
t1とt3あるとします。CREATE TABLE t1 ( s1 INT, s2 INT, s3 INT, PRIMARY KEY(s3) ) ENGINE=InnoDB; CREATE TABLE t3 ( s1 INT, s2 INT, s3 INT, KEY(s1), CONSTRAINT CO FOREIGN KEY (s2) REFERENCES t1(s3) ) ENGINE=InnoDB;それらの 2 つのテーブルに対し、
KEY_COLUMN_USAGEテーブルには 2 つの行があります。1 つの行の
CONSTRAINT_NAME='PRIMARY',TABLE_NAME='t1',COLUMN_NAME='s3',ORDINAL_POSITION=1,POSITION_IN_UNIQUE_CONSTRAINT=NULL.1 つの行の
CONSTRAINT_NAME='CO',TABLE_NAME='t3',COLUMN_NAME='s2',ORDINAL_POSITION=1,POSITION_IN_UNIQUE_CONSTRAINT=1.
ROUTINES
テーブルは保存されたルーチン(プロシージャおよび関数の両方)
に関する情報を提供します。ROUTINES
テーブルはこの段階ではユーザー定義の関数 (UDF)
を含みません。
「mysql.proc 名」
の名前のカラムは
INFORMATION_SCHEMA.ROUTINES テーブル
カラムに相当する mysql.proc
テーブル カラムを意味します。
INFORMATION_SCHEMA
名 | mysql.proc 名 | 備考 |
SPECIFIC_NAME | specific_name | |
ROUTINE_CATALOG | NULL | |
ROUTINE_SCHEMA | db | |
ROUTINE_NAME | name | |
ROUTINE_TYPE | type | {PROCEDURE|FUNCTION} |
DTD_IDENTIFIER | (データタイプ デスクリプター) | |
ROUTINE_BODY | SQL | |
ROUTINE_DEFINITION | body | |
EXTERNAL_NAME | NULL | |
EXTERNAL_LANGUAGE | language | NULL |
PARAMETER_STYLE | SQL | |
IS_DETERMINISTIC | is_deterministic | |
SQL_DATA_ACCESS | sql_data_access | |
SQL_PATH | NULL | |
SECURITY_TYPE | security_type | |
CREATED | created | |
LAST_ALTERED | modified | |
SQL_MODE | sql_mode | MySQL 拡張 |
ROUTINE_COMMENT | comment | MySQL 拡張 |
DEFINER | definer | MySQL 拡張 |
注:
MySQL は
EXTERNAL_LANGUAGEをこのように計算します。mysql.proc.language='SQL'の場合、EXTERNAL_LANGUAGEはNULLそうでない場合、
EXTERNAL_LANGUAGEはmysql.proc.languageにあります。しかし、まだ外部言語がないので、それは常にNULLです。
VIEWS
テーブルはデータベースの表示に関する情報を提供します。このテーブルにアクセスするには
SHOW VIEW の権限が必要です。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
TABLE_CATALOG | NULL | |
TABLE_SCHEMA | ||
TABLE_NAME | ||
VIEW_DEFINITION | ||
CHECK_OPTION | ||
IS_UPDATABLE | ||
DEFINER | ||
SECURITY_TYPE |
注:
VIEW_DEFINITIONカラムにはSHOW CREATE VIEWが生成するCreate Table領域で表示されるそのほとんどがあります。SELECTの前の単語およびWITH CHECK OPTIONの前の単語をスキップします。元のステートメントは以下のようであったと想定します。CREATE VIEW v AS SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1 WITH CHECK OPTION;
その際表示の定義はこのようになります。
SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
CHECK_OPTIONカラムは常にはNONEの値があります。IS_UPDATABLEカラムは表示が更新可能な場合はYES、更新できない場合はNOになります。DEFINERカラムは誰がその表示を定義したかを示します。SECURITY_TYPEにはDEFINERあるいはINVOKERの値があります。
TRIGGERS
テーブルはトリガに関する情報を提供します。このテーブルにアクセスするには
SUPER 権限が必要です。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
TRIGGER_CATALOG | NULL | |
TRIGGER_SCHEMA | ||
TRIGGER_NAME | Trigger | |
EVENT_MANIPULATION | Event | |
EVENT_OBJECT_CATALOG | NULL | |
EVENT_OBJECT_SCHEMA | ||
EVENT_OBJECT_TABLE | Table | |
ACTION_ORDER | 0 | |
ACTION_CONDITION | NULL | |
ACTION_STATEMENT | Statement | |
ACTION_ORIENTATION | ROW | |
ACTION_TIMING | Timing | |
ACTION_REFERENCE_OLD_TABLE | NULL | |
ACTION_REFERENCE_NEW_TABLE | NULL | |
ACTION_REFERENCE_OLD_ROW | OLD | |
ACTION_REFERENCE_NEW_ROW | NEW | |
CREATED | NULL (0) | |
SQL_MODE | MySQL 拡張 | |
DEFINER | MySQL 拡張 |
注:
TRIGGER_SCHEMAおよびTRIGGER_NAMEカラムはトリガが発生するデータベースおよびトリガ名をそれぞれ含みます。EVENT_MANIPULATIONカラムは'INSERT'、'DELETE'、あるいは'UPDATE'のいずれかの値を含みます。18章トリガ で説明したように、すべてのトリガは正確に 1 つのテーブルに関連付けられます。
EVENT_OBJECT_SCHEMAおよびEVENT_OBJECT_TABLEカラムはこのテーブルが発生するデータベース、およびテーブル名を含みます。ACTION_ORDERステートメントは同じテーブルのすべての類似トリガ リストのトリガの実行順序を含みます。現在この値は常に0です。というのは同じテーブルで同じEVENT_MANIPULATIONおよびACTION_TIMINGで1 つ以上のトリガを持てないからです。ACTION_STATEMENTカラムはトリガが呼び出されたときに実行されるステートメントを含みます。これはSHOW TRIGGERSから出力されるStatementカラムに表示されるテキストと同じです。このテキストは UTF-8 エンコーディングを使用していることを留意してください。ACTION_ORIENTATIONカラムは常に'ROW'の値を含みます。ACTION_TIMINGカラムは'BEFORE'あるいは'AFTER'のいずれかの値を含みます。ACTION_REFERENCE_OLD_ROWおよびACTION_REFERENCE_NEW_ROWはそれぞれ新旧のカラム識別子を含みます。このことはACTION_REFERENCE_OLD_ROWは常に'OLD'の値を含みACTION_REFERENCE_NEW_ROWは常に'NEW'の値を含みます。SQL_MODEカラムはトリガが作成されたとき(そしてこのように現在のサーバーの SQL モードに関係なくトリガが呼び出されたときにはいつでも有効です) 有効だったサーバーの SQL モードを表示します。このカラムの可能な範囲の値はsql_modeシステム変数と同じです。「SQL モード」 を参照してください。DEFINERカラムが MySQL 5.1.2 に追加されました。DEFINERは誰がトリガを定義したかを示します。以下のカラムは常に
NULLを含みます。TRIGGER_CATALOG、EVENT_OBJECT_CATALOG、ACTION_CONDITION、ACTION_REFERENCE_OLD_TABLE、ACTION_REFERENCE_NEW_TABLE、およびCREATED。
「トリガの使用」
で定義されたins_sum の使用例
mysql> SELECT * FROM INFORMATION_SCHEMA.TRIGGERS\G
*************************** 1. row ***************************
TRIGGER_CATALOG: NULL
TRIGGER_SCHEMA: test
TRIGGER_NAME: ins_sum
EVENT_MANIPULATION: INSERT
EVENT_OBJECT_CATALOG: NULL
EVENT_OBJECT_SCHEMA: test
EVENT_OBJECT_TABLE: account
ACTION_ORDER: 0
ACTION_CONDITION: NULL
ACTION_STATEMENT: SET @sum = @sum + NEW.amount
ACTION_ORIENTATION: ROW
ACTION_TIMING: BEFORE
ACTION_REFERENCE_OLD_TABLE: NULL
ACTION_REFERENCE_NEW_TABLE: NULL
ACTION_REFERENCE_OLD_ROW: OLD
ACTION_REFERENCE_NEW_ROW: NEW
CREATED: NULL
SQL_MODE:
DEFINER: me@localhost
「SHOW TRIGGERS 構文」 も参照してください。
PLUGINS
テーブルはサーバーのプラグインに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
PLUGIN_NAME | Name | MySQL 拡張 |
PLUGIN_VERSION | MySQL 拡張 | |
PLUGIN_STATUS | Status | MySQL 拡張 |
PLUGIN_TYPE | Type | MySQL 拡張 |
PLUGIN_TYPE_VERSION | MySQL 拡張 | |
PLUGIN_LIBRARY | Library | MySQL 拡張 |
PLUGIN_LIBRARY_VERSION | MySQL 拡張 | |
PLUGIN_AUTHOR | MySQL 拡張 | |
PLUGIN_DESCRIPTION | MySQL 拡張 |
注:
PLUGINSテーブルは非標準のテーブルです。MySQL 5.1.5 に追加されました。
「SHOW PLUGINS 構文」 も参照してください。
PLUGINS テーブルはストレージ
エンジンに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
ENGINE | Engine | MySQL 拡張 |
SUPPORT | Support | MySQL 拡張 |
COMMENT | Comment | MySQL 拡張 |
TRANSACTIONS | Transactions | MySQL 拡張 |
XA | XA | MySQL 拡張 |
SAVEPOINTS | Savepoints | MySQL 拡張 |
注:
ENGINESテーブルは非標準のテーブルです。MySQL 5.1.5 に追加されました。
「SHOW ENGINES 構文」 も参照してください。
PARTITIONS
テーブルはテーブルの分割に関する情報を提供します。テーブルの分割に関する詳細は
15章パーティショニング を参照してください。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
TABLE_CATALOG | MySQL 拡張 | |
TABLE_SCHEMA | MySQL 拡張 | |
TABLE_NAME | MySQL 拡張 | |
PARTITION_NAME | MySQL 拡張 | |
SUBPARTITION_NAME | MySQL 拡張 | |
PARTITION_ORDINAL_POSITION | MySQL 拡張 | |
SUBPARTITION_ORDINAL_POSITION | MySQL 拡張 | |
PARTITION_METHOD | MySQL 拡張 | |
SUBPARTITION_METHOD | MySQL 拡張 | |
PARTITION_EXPRESSION | MySQL 拡張 | |
SUBPARTITION_EXPRESSION | MySQL 拡張 | |
PARTITION_DESCRIPTION | MySQL 拡張 | |
TABLE_ROWS | MySQL 拡張 | |
AVG_ROW_LENGTH | MySQL 拡張 | |
DATA_LENGTH | MySQL 拡張 | |
MAX_DATA_LENGTH | MySQL 拡張 | |
INDEX_LENGTH | MySQL 拡張 | |
DATA_FREE | MySQL 拡張 | |
CREATE_TIME | MySQL 拡張 | |
UPDATE_TIME | MySQL 拡張 | |
CHECK_TIME | MySQL 拡張 | |
CHECKSUM | MySQL 拡張 | |
PARTITION_COMMENT | MySQL 拡張 | |
NODEGROUP | MySQL 拡張 | |
TABLESPACE_NAME | MySQL 拡張 |
注:
PARTITIONSテーブルは非標準のテーブルです。それは MySQL 5.1.6 に追加されています。このテーブルの各レコードは個々の分割あるいは分割されたテーブルのサブ分割に一致します。
TABLE_CATALOG:このカラムは常にNULLです。TABLE_SCHEMA:このカラムはテーブルが属すデータベース名を含みます。TABLE_NAME:このカラムは分割を含むテーブル名を含みます。PARTITION_NAME:分割の名前です。SUBPARTITION_NAME:PARTITIONSテーブルのレコードがサブ分割を表す場合、このカラムはサブ分割名を含みます。そうでない場合NULLになります。PARTITION_ORDINAL_POSITION:すべての分割はそれらが定義されたときの順序でインデックスが付けられます。最初の分割に割り当てられた番号は1になります。インデックスは分割が追加、削除、再手配されることによって変わります。このカラムに表示された番号はインデックスの変更を考慮した現在の順序を表します。SUBPARTITION_ORDINAL_POSITION:所定の分割のサブ分割はテーブル内で分割がインデックスされるの同様にインデックスまたは再インデックスされます。PARTITION_METHOD:RANGE、LIST、HASH、LINEAR HASH、KEY、あるいはLINEAR KEYのいずれかの値です。つまり、 「パーティショニングのタイプ」 で説明した利用できる分割タイプの 1 つです。SUBPARTITION_METHOD:HASH、LINEAR HASH、KEYあるいはLINEAR KEYのいずれかの値の 1 つです。つまり、「サブパーティショニング」 で説明したサブ利用できる分割タイプの 1 つです。PARTITION_EXPRESSION:これはテーブルの現在の分割スキーマを作成したCREATE TABLEあるいはALTER TABLEに使用された分割関数の式です。例として、このステートメントを使用して
testデータベースで作成された分割テーブルを考えてみます。CREATE TABLE tp ( c1 INT, c2 INT, c3 VARCHAR(25) ) PARTITION BY HASH(c1 + c2) PARTITIONS 4;このテーブルの分割のPARTITIONS テーブル レコードの
PARTITION_EXPRESSIONカラムは以下のようにc1 + c2を表示します。mysql>
SELECT DISTINCT PARTITION_EXPRESSION>FROM INFORMATION_SCHEMA.PARTITIONS>WHERE TABLE_NAME='tp' AND TABLE_SCHEMA='test';+----------------------+ | PARTITION_EXPRESSION | +----------------------+ | c1 + c2 | +----------------------+ 1 row in set (0.09 sec)SUBPARTITION_EXPRESSION:これはテーブルの分割を定義するために使用された分割式にPARTITION_EXPRESSIONが行っているのと同様にテーブルのサブ分割を定義するサブ分割式に対して同様に機能します。テーブルにサブ分割がない場合、このカラムは
NULLです。PARTITION_DESCRIPTION:このカラムは RANGE および LIST 分割に使用されます。RANGE分割では、それは分割のVALUES LESS THAN節で設定された値セットを含みます。それは整数あるいはMAXVALUEのいずれかになります。LIST分割では、このカラムは分割VALUES IN節で定義された値を含みます。それは整数値のコンマ区切りのリストです。PARTITION_METHODがRANGEあるいはLIST以外の分割の場合、このカラムは常にNULLになります。TABLE_ROWS:分割のテーブル行の数です。AVG_ROW_LENGTH:この分割あるいはサブ分割で保存された行の平均の長さでバイトで表します。これは
TABLE_ROWSで分割されたDATA_LENGTHと同じです。DATA_LENGTH:この分割あるいはサブ分割に保存されたすべての行の全長でバイトで表します。— つまり分割およびサブ分割に保存されたバイトの総数です。MAX_DATA_LENGTH:この分割およびサブ分割に保存される最大のバイト数です。INDEX_LENGTH:この分割およびサブ分割のインデックス ファイルの長さでバイトで表します。DATA_FREE:分割あるいはサブ分割に割り当てられたバイト数で使用されていないものです。CREATE_TIME:分割およびサブ分割の作成に要する時間です。UPDATE_TIME:分割あるいはサブ分割が最後に変更された時間です。CHECK_TIME:分割あるいはサブ分割が属すテーブルが最後にチェックされた時間です。注:ストレージ エンジンの中には今回更新されないものがあります。というのはこれらのストレージ エンジンを使用しているテーブルに対し、この値が常に
NULLだからです。CHECKSUM:チェックサムの値(もしあれば)、そうでない場合、このカラムはNULLです。PARTITION_COMMENT:このカラムは分割に対するコメントのテキストを含んでいます。このカラムのデフォルト値は空の文字列です。
NODEGROUP:これは分割が属すノードグループです。これは MySQL クラスタテーブルにのみ関連します。そうでない場合このカラムの値は常に0です。TABLESPACE_NAME:このカラムは分割が属すテーブルスペース名を含んでいます。MySQL 5.1 では、このカラムの値は常にDEFAULTです。重要MySQL 5.1.6 以前の MySQL バージョンで作成された分割テーブルがある場合、MySQL 5.1.6 あるいはそれ以降にアップグレードする場合、
SHOW、あるいはDESCRIBEthePARTITIONSからSELECTすることはできません。MySQL 5.1.5 あるいはそれ以前のバージョンから MySQL 5.1.6 およびそれ以降にアップグレードする前に 「Changes in release 5.1.6 (01 February 2006)」 を 参照してください。非分割のテーブルには
INFORMATION_SCHEMA.PARTITIONSにレコードが 1 つあります。しかし、PARTITION_NAME、SUBPARTITION_NAME、PARTITION_ORDINAL_POSITION、SUBPARTITION_ORDINAL_POSITION、PARTITION_METHOD、SUBPARTITION_METHOD、PARTITION_EXPRESSION、SUBPARTITION_EXPRESSION、およびPARTITION_DESCRIPTIONカラムの値はすべてNULLです。(この場合のPARTITION_COMMENTのカラムは空白です。)MySQL 5.1 には、
PARTITIONSテーブルにNDBClusterストレージ エンジンを使用したテーブルに対しレコードが 1 つだけあります。同じカラムはまた非分割テーブルに対してはNULL(あるいは空) です。
EVENTS テーブルは 19章Event Scheduler
で説明した計画したイベントに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
EVENT_CATALOG | NULL, MySQL 拡張 | |
EVENT_SCHEMA | Db | MySQL 拡張 |
EVENT_NAME | Name | MySQL 拡張 |
DEFINER | Definer | MySQL 拡張 |
EVENT_BODY | MySQL 拡張 | |
EVENT_DEFINITION | MySQL 拡張 | |
EVENT_TYPE | Type | MySQL 拡張 |
EXECUTE_AT | Execute at | MySQL 拡張 |
INTERVAL_VALUE | Interval value | MySQL 拡張 |
INTERVAL_FIELD | Interval field | MySQL 拡張 |
SQL_MODE | MySQL 拡張 | |
STARTS | Starts | MySQL 拡張 |
ENDS | Ends | MySQL 拡張 |
STATUS | Status | MySQL 拡張 |
ON_COMPLETION | MySQL 拡張 | |
CREATED | MySQL 拡張 | |
LAST_ALTERED | MySQL 拡張 | |
LAST_EXECUTED | MySQL 拡張 | |
EVENT_COMMENT | MySQL 拡張 |
注:
EVENTSテーブルは非標準のテーブルです。それは MySQL 5.1.6 に追加されています。EVENT_CATALOG:このカラムの値は常にNULLです。EVENT_SCHEMA:イベントが属すスキーマ(データベース)の名前です。EVENT_NAME:イベントの名前です。DEFINER:イベントを作成したユーザーです。常に'フォーマットに表示されます。user_name'@'host_name'EVENT_BODY:イベントのDO節のステートメントに使用された言語です。MySQL 5.1 では、これは常にSQLです。このカラムは MySQL 5.1.12 に追加されています。 MySQL の以前のバージョンの同じ名前のカラム(今の名前は
EVENT_DEFINITION) と混同することはありません。EVENT_DEFINITION:イベントDO節を構成する SQL ステートメントのテキストです。換言すれば、このイベントで実行されたステートメントです。注:MySQL 5.1.12 以前のバージョンでは、このカラムは
EVENT_BODYという名前でした。EVENT_TYPE:ONE TIMEあるいはRECURRINGのいずれかの値です。EXECUTE_AT:1 回のイベントでは、これはイベントの作成に使用されたCREATE EVENTステートメントのAT節で指定されたDATETIME値、あるいはイベントを変更した最後のALTER EVENTステートメントです。このカラムに表示された値はイベントAT節に含まれる INTERNAL 値の加算あるいは減算を意味しています。例えば、イベントがON SCHEDULE AT CURRENT_TIMESTAMP + '1:6' DAY_HOURを使用して作成された場合、およびイベントが 2006-02-09 の 14:05:30 に作成された場合、カラムに表示される値は'2006-02-10 20:05:30'になります。そのイベントのタイミングが
AT節(すなわち、イベントは再帰的な場合)ではなくEVERY節で決定される場合、 このカラムの値はNULLになります。INTERVAL_VALUE:再帰的なイベントの場合、このカラムはイベントEVERY節の数値的な部分を含みます。1 回のイベントの場合(つまり、イベントのタイミングが
AT節で決まるイベントの場合)、このカラムの値はNULLになります。INTERVAL_FIELD:再帰的なイベントの場合、このカラムはそのイベントを管理するEVERY節の単位部分を含みます。そのイベントは 'INTERVAL_' のプリフィックスが付きます。このように、このカラムは 'INTERVAL_YEAR'、'INTERVAL_QUARTER'、'INTERVAL_DAY' などの値を含みます。1 回のイベントの場合(つまり、そのタイミングが
AT節で決まるイベントの場合)、このカラムの値はNULLになります。SQL_MODE:イベントが作成されたあるいは変更された時に実行中のSQL モード。STARTS:定義にSTARTS節を含む再帰的なイベントでは、このカラムは相当するDATETIME値を含みます。EXECUTE_ATカラムで、この値は使用されている式を解きます。イベントのタイミングに影響を与えるような
STARTS節がない場合、このカラムは空です。(MySQL 5.1.8 以前の場合は、そのような場合それはNULLが含まれていました。)ENDS:定義にENDS節を含む再帰的なイベントでは、このカラムは相当するDATETIME値を含みます。EXECUTE_ATカラム(前の例を参照)では、この値は使用されている式を解きます。イベントのタイミングに影響を与える
ENDS節がない場合、このカラムはNULLを含みます。STATUS:ENABLEDあるいはDISABLEDの 2 つの値のいずれかの値です。ON_COMPLETION:PRESERVEあるいはNOT PRESERVEの 2 つの値のいずれかの値です。CREATED:イベントが作成された日時です。これはDATETIME値です。LAST_ALTERED:イベントが最後に変更された日時です。これはDATETIME値です。イベントが作成されてから変更されなかった場合、このカラムはCREATEDカラムと同じ値を保持します。LAST_EXECUTED:イベントが最後に実行された日時です。DATETIME値。イベントが実行されなかった場合、このカラムの値はNULLです。EVENT_COMMENT:イベントにコメントがある場合のコメントのテキストです。コメントが無い場合、このカラムの値は空の文字列になります。
例:ユーザー
jon@ghidora が e_daily
というイベントを作成したとします。それを数分後に以下の
ALTER EVENT
ステートメントを使用して変更します。
DELIMITER |
CREATE EVENT e_daily
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 6 HOUR
DISABLE
COMMENT 'Saves total number of sessions and
clears the table once per day.'
DO
BEGIN
INSERT INTO site_activity.totals (when, total)
SELECT CURRENT_TIMESTAMP, COUNT(*)
FROM site_activity.sessions;
DELETE FROM site_activity.sessions;
END |
DELIMITER ;
ALTER EVENT e_daily
ENABLED;(コメントは複数の行にわたって展開できます。)
このユーザーは次に以下の SELECT
ステートメントを実行し、下記の出力を得ます。
mysql>SELECT * FROM INFORMATION_SCHEMA.EVENTS>WHERE EVENT_NAME = 'e_daily'>AND EVENT_SCHEMA = 'myschema'\G*************************** 1. row *************************** EVENT_CATALOG: NULL EVENT_SCHEMA: myschema EVENT_NAME: e_daily DEFINER: jon@ghidora EVENT_BODY: BEGIN INSERT INTO site_activity.totals (when, total) SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions; DELETE FROM site_activity.sessions; END EVENT_TYPE: RECURRING EXECUTE_AT: NULL INTERVAL_VALUE: 1 INTERVAL_FIELD: INTERVAL_DAY SQL_MODE: NULL STARTS: 2006-02-09 10:41:23 ENDS: NULL STATUS: ENABLED ON_COMPLETION: DROP CREATED: 2006-02-09 14:35:35 LAST_ALTERED: 2006-02-09 14:41:23 LAST_EXECUTED: NULL EVENT_COMMENT: Saves total number of sessions and clears the table once per day. 1 row in set (0.50 sec)
重要STARTS、ENDS、および
LAST_EXECUTED
カラムで表示された時間はサーバーのタイムゾーンの設定にかかわらず現在の世界時
(GMT あるいは UTC)
で表示されます。mysql.event
テーブルのstarts、ends、および
last_executed カラム並びに SHOW
[FULL] EVENTS の出力の Starts
および ENDs
カラムも同様に世界時を使用しています。)CREATED
および LAST_ALTERED
カラムはサーバーのタイムゾーン
(mysql.event テーブルの
created および
last_altered カラムも同様)
を使用しています。。
例えば、前に例示した e_daily
イベントはオーストラリアのブリスベンにあるコンピューターで、東部オーストラリア時間の2006
年 2 月 9日 の 14:35:35
に作成されたとすると、それはタイムゾーンでは
GMT+10.00
となります。イベントの定義は(このセクションの以前の例示の
ALTER EVENT を使用して ) 数分後に
14:41:23 に更新されました。これらが
CREATED および
LAST_ALTERED
に表示される値です。イベントは 6 時間後 —
つまり、同日のローカルタイムの 20:41:23
に実行されるように計画されます。この時間から
10 時間を減算すると世界時の 10:41:23
が得られ、この値が STARTS
に表示されます。
世界時の使用はアプリケーションでは当てに出来ません。というのは MySQL のリリースによってサーバーのローカルタイムが変更されることが予想されるためです。(Bug #16420 参照)
「SHOW EVENTS」 も参照してください。
FILES テーブルは MySQL
NDB ディスクデータ
テーブルが保存されるファイルに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
FILE_ID | MySQL 拡張 | |
FILE_NAME | MySQL 拡張 | |
FILE_TYPE | MySQL 拡張 | |
TABLESPACE_NAME | MySQL 拡張 | |
TABLE_CATALOG | MySQL 拡張 | |
TABLE_SCHEMA | MySQL 拡張 | |
TABLE_NAME | MySQL 拡張 | |
LOGFILE_GROUP_NAME | MySQL 拡張 | |
LOGFILE_GROUP_NUMBER | MySQL 拡張 | |
ENGINE | MySQL 拡張 | |
FULLTEXT_KEYS | MySQL 拡張 | |
DELETED_ROWS | MySQL 拡張 | |
UPDATE_COUNT | MySQL 拡張 | |
FREE_EXTENTS | MySQL 拡張 | |
TOTAL_EXTENTS | MySQL 拡張 | |
EXTENT_SIZE | MySQL 拡張 | |
INITIAL_SIZE | MySQL 拡張 | |
MAXIMUM_SIZE | MySQL 拡張 | |
AUTOEXTEND_SIZE | MySQL 拡張 | |
CREATION_TIME | MySQL 拡張 | |
LAST_UPDATE_TIME | MySQL 拡張 | |
LAST_ACCESS_TIME | MySQL 拡張 | |
RECOVER_TIME | MySQL 拡張 | |
TRANSACTION_COUNTER | MySQL 拡張 | |
VERSION | MySQL 拡張 | |
ROW_FORMAT | MySQL 拡張 | |
TABLE_ROWS | MySQL 拡張 | |
AVG_ROW_LENGTH | MySQL 拡張 | |
DATA_LENGTH | MySQL 拡張 | |
MAX_DATA_LENGTH | MySQL 拡張 | |
INDEX_LENGTH | MySQL 拡張 | |
DATA_FREE | MySQL 拡張 | |
CREATE_TIME | MySQL 拡張 | |
UPDATE_TIME | MySQL 拡張 | |
CHECK_TIME | MySQL 拡張 | |
CHECKSUM | MySQL 拡張 | |
STATUS | MySQL 拡張 | |
EXTRA | MySQL 拡張 |
注:
FILE_IDカラムの値は自動生成されます。FILE_NAMEはCREATE LOGFILE GROUPあるいはALTER LOGFILE GRUOPによって作成されたUNDOログファイルの名前です。またはCREATE TABLESPACEあるいはALTER TABLESPACEで作成されたデータファイルです。FILE_TYPEはUNDOFILEあるいはDATAFILEのいずれかの値です。TABLESPACE_NAMEはファイルが関連付けられているテーブルスペースの名前です。MySQL 5.1 では、
TABLESPACE_CATALOGカラムの値は常にNULLです。TABLE_NAMEは関連するファイルがある場合にファイルに関連付けられたディスク データ テーブルの名前です。LOGFILE_GROUP_NAMEカラムはログファイルあるいはデータファイルが属すログファイルのグループに名前を付けます。UNDOログファイルでは、LOGFILE_GROUP_NUMBERはログファイルが属すログファイル グループの自動生成された ID を含みます。MySQL クラスタ ディスクデータのログファイルあるいはデータファイルに対し、
ENGINEカラムの値は常にNDBあるいはNDBCLUSTERになります。MySQL クラスタ ディスク データのログファイルに対し、
FULLTEXT_KEYSカラムの値は常に空です。FREE EXTENTSカラムはファイルが使用していない拡張の番号を表示します。TOTAL EXTENTSカラムはファイルに割り当てられた拡張の総数を表示します。これらの 2 つのカラムの違いは現在ファイルが使用している拡張の数です。
SELECT TOTAL_EXTENTS - FREE_EXTENTS AS extents_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = 'myfile.dat';使用中のディスク容量を
EXTENT_SIZEカラムの値によってこの違いを乗算したファイルによって最大化することができます。それによりファイルにバイトで拡張のサイズを与えます。SELECT (TOTAL_EXTENTS - FREE_EXTENTS) * EXTENT_SIZE AS bytes_used FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = 'myfile.dat';同様に、所定のファイルに残された利用できるスペースの容量を
FREE_EXTENTSにEXTENT_SIZE乗算することで予測できます。SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free FROM INFORMATION_SCHEMA.FILES WHERE FILE_NAME = 'myfile.dat';重要上記のクエリで生成されたバイトの値は概算のみで、その正確性は
EXTENT_SIZEの値に逆比例します。つまり、EXTENT_SIZEが大きくなれば、概算の正確性は落ちます。拡張が一度使用されるとそれが属すデータファイルをドロップせずにはそれを自由に出来ないことを覚えておく必要があります。このことは、ディスクデータのテーブルからの削除はディスクスペースを増やさないということです。
拡張サイズは
CREATE TABLESPACEステートメントで設定できます。詳細については、「CREATE TABLESPACE構文」 をご参照してください。INITIAL_SIZEカラムはファイルのサイズをバイトで表示します。これはファイルの作成に使用されたCREATE LOGFILE GROUP、、ALTER LOGFILE GROUP、CREATE TABLESPACE、あるいはALTER TABLESPACEのINITIAL_SIZE節に使用された値と同じです。MySQL 5.1 クラスタ ディス クデータ ファイルでは、
MAXIMUM_SIZEカラムの値は常にINITIAL_SIZEと同じで、AUTOEXTEND_SIZEカラムは常に空です。CREATION_TIMEカラムはファイルが作成された日時を表示します。LAST_UPDATE_TIMEカラムはファイルが最後に変更された日時を表示します。LAST_ACCESSEDカラムはファイルが最後にサーバーによってアクセスされた日時を表示します。現在は、これらのカラムの値はオペレーティング システムから知らされたものであり、
NDBストレージ エンジンにより供給されたものではありません。オペレーティング システムが何の値も提供していない場合には、これらのカラムには0000-00-00 00:00:00が表示されます。MySQL クラスタ ディスク データのファイルでは、
RECOVER_TIMEおよびTRANSACTION_COUNTERカラムは常に0です。MySQL 5.1 クラスタ ディスク データ ファイルでは、以下のカラムは常に
NULLです。VERSIONROW_FORMATTABLE_ROWSAVG_ROW_LENGTHDATA_LENGTHMAX_DATA_LENGTHINDEX_LENGTHDATA_FREECREATE_TIMEUPDATE_TIMECHECK_TIMECHECKSUM
MySQLクラスタ ディスク データ ファイルでは、
STATUSカラムの値は常にNORMALです。MySQL クラスタ ディスク データ ファイルでは、
EXTRAカラムは、各データノードがファイルのコピーを持っているためどのデータノードにファイルが属すかを表示します。例えば、このステートメントを MySQL クラスタの 4 つのデータノードで使用するとします。CREATE LOGFILE GROUP mygroup ADD UNDOFILE 'new_undo.dat' INITIAL_SIZE 2G ENGINE NDB;CREATE LOGFILE GROUPステートメントの実行を完了すると、FILESテーブルに対するこのクエリの以下の結果に類似した結果が表示されます。mysql>
SELECT LOGFILE_GROUP_NAME, FILE_TYPE, EXTRA->FROM INFORMATION_SCHEMA.FILES->WHERE FILE_NAME = 'new_undo.dat';+--------------------+-------------+----------------+ | LOGFILE_GROUP_NAME | FILE_TYPE | EXTRA | +--------------------+-------------+----------------+ | mygroup | UNDO FILE | CLUSTER_NODE=3 | | mygroup | UNDO FILE | CLUSTER_NODE=4 | | mygroup | UNDO FILE | CLUSTER_NODE=5 | | mygroup | UNDO FILE | CLUSTER_NODE=6 | +--------------------+-------------+----------------+ 4 rows in set (0.01 sec)FILESテーブルは非標準のテーブルです。それは MySQL 5.1.6 に追加されています。MySQL 5.1.14 を開始すると、ログファイル グループの作成に続いて
FILESテーブルに追加の行が表示されます。この行はFILE_NAMEカラムの値に対してNULLです。というのはこの行に対し、FILE_IDカラムの値は常に0で、FILE_TYPEカラムは常にUNDO FILEで、STATUSカラムは常にNORMALになります。MySQL 5.1 では、ENGINEカラムの値は常にndbclusterです。この行は
FREE_EXTENTSカラムでLOGFILE_GROUP_NAMEおよびLOGFILE_GROUP_NUMBERカラムにそれぞれその名前と数が表示された所定のログファイル グループに属すすべての undo ファイルに利用できるフリー拡張の総数を表示します。MySQL クラスタに既存のログファイルが無いものとして、以下のステートメントを使用してログファイルを 1 つ作成するとします。
mysql>
CREATE LOGFILE GROUP lg1->ADD UNDOFILE 'undofile.dat'->INITIAL_SIZE = 16M->UNDO_BUFFER_SIZE = 1M->ENGINE = NDB;Query OK, 0 rows affected (3.81 sec)FILESテーブルにクエリするとNULL行が表示されます。mysql>
SELECT DISTINCT->FILE_NAME AS File,->FREE_EXTENTS AS Free,->TOTAL_EXTENTS AS Total,->EXTENT_SIZE AS Size,->INITIAL_SIZE AS Initial->FROM INFORMATION_SCHEMA.FILES;+--------------+---------+---------+------+----------+ | File | Free | Total | Size | Initial | +--------------+---------+---------+------+----------+ | undofile.dat | NULL | 4194304 | 4 | 16777216 | | NULL | 4184068 | NULL | 4 | NULL | +--------------+---------+---------+------+----------+ 2 rows in set (0.01 sec)undo ロギングに利用できるフリー拡張の総数は常にログファイルのすべての undo ファイルに対して undo ファイルを維持に必要なオーバーヘッドにより
TOTAL_EXTENTSカラムの値の合計より幾分少なくなります。これはログファイル グループに 2 番目の undo ファイルを追加すると表示され、FILESテーブルに対して前のクエリを繰返します。mysql>
ALTER LOGFILE GROUP lg1->ADD UNDOFILE 'undofile02.dat'->INITIAL_SIZE = 4M->ENGINE = NDB;Query OK, 0 rows affected (1.02 sec) mysql>SELECT DISTINCT->FILE_NAME AS File,->FREE_EXTENTS AS Free,->TOTAL_EXTENTS AS Total,->EXTENT_SIZE AS Size,->INITIAL_SIZE AS Initial->FROM INFORMATION_SCHEMA.FILES;+----------------+---------+---------+------+----------+ | File | Free | Total | Size | Initial | +----------------+---------+---------+------+----------+ | undofile.dat | NULL | 4194304 | 4 | 16777216 | | undofile02.dat | NULL | 1048576 | 4 | 4194304 | | NULL | 5223944 | NULL | 4 | NULL | +----------------+---------+---------+------+----------+ 3 rows in set (0.01 sec)このログファイル グループを使用たディスク データ テーブルによる undo ロギングに利用されるバイトでのフリースペースの最大化はフリー拡張に初期サイズを乗算することで最大化できます。
mysql>
SELECT->FREE_EXTENTS AS 'Free Extents',->FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes'->FROM INFORMATION_SCHEMA.FILES->WHERE LOGFILE_GROUP_NAME = 'lg1'->AND FILE_NAME IS NULL;+--------------+------------+ | Free Extents | Free Bytes | +--------------+------------+ | 5223944 | 20895776 | +--------------+------------+ 1 row in set (0.02 sec)ディスク データ テーブルを作成してその中にいくつか行を挿入すると、undo のロギング用に残されたスペースを大まかに知ることができます。
mysql>
CREATE TABLESPACE ts1->ADD DATAFILE 'data1.dat'->USE LOGFILE GROUP lg1->INITIAL_SIZE 512M->ENGINE = NDB;Query OK, 0 rows affected (8.71 sec) mysql>CREATE TABLE dd (->c1 INT NOT NULL PRIMARY KEY,->c2 INT,->c3 DATE->)->TABLESPACE ts1 STORAGE DISK->ENGINE = NDB;Query OK, 0 rows affected (2.11 sec) mysql>INSERT INTO dd VALUES->(NULL, 1234567890, '2007-02-02'),->(NULL, 1126789005, '2007-02-03'),->(NULL, 1357924680, '2007-02-04'),->(NULL, 1642097531, '2007-02-05');Query OK, 4 rows affected (0.01 sec) mysql>SELECT->FREE_EXTENTS AS 'Free Extents',->FREE_EXTENTS * EXTENT_SIZE AS 'Free Bytes'->FROM INFORMATION_SCHEMA.FILES->WHERE LOGFILE_GROUP_NAME = 'lg1'->AND FILE_NAME IS NULL;+--------------+------------+ | Free Extents | Free Bytes | +--------------+------------+ | 5207565 | 20830260 | +--------------+------------+ 1 row in set (0.01 sec)FILESテーブルに関連付けられたSHOWコマンドはありません。FILESテーブルを使用してクラスタ ディスク データ テーブルに関する情報の取得に関する他の例については 「MySQL Cluster ディスク データ ストレージ」 を参照してください。
PROCESSLIST
テーブルは動作しているスレッドに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
ID | Id | MySQL 拡張 |
USER | User | MySQL 拡張 |
HOST | Host | MySQL 拡張 |
DB | db | MySQL 拡張 |
COMMAND | Command | MySQL 拡張 |
TIME | Time | MySQL 拡張 |
STATE | State | MySQL 拡張 |
INFO | Info | MySQL 拡張 |
テーブル カラムの全体的な説明については
「SHOW PROCESSLIST 構文」 を参照してください。
注:
PROCESSLISTテーブルは非標準のテーブルです。それは MySQL 5.1.7 に追加されています。相当する
SHOWステートメントの出力と同様、PROCESSLISTテーブルはPROCESSの権限が無い場合は、お客様のスレッドに関する情報のみ表示されます。権限がある場合には他のスレッドに関する情報も表示できます。匿名のユーザーはどの行も見ることはできません。SQL ステートメントが
INFORMATION_SCHEMA.PROCESSLISTを参照している場合、ステートメントの実行が開始されると全体のテーブルを一度表示します。それでステートメント中の読み取りの一貫性が保たれます。複数のステートメントのトランザクションではリードの一貫性はありません。
以下のステートメントは等価です。
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST SHOW PROCESSLIST
REFERENTIAL_CONSTRAINTS
テーブルは外部キーに関する情報を提供します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
| CONSTRAINT_CATALOG | NULL | |
| CONSTRAINT_SCHEMA | ||
| CONSTRAINT_NAME | ||
| UNIQUE_CONSTRAINT_CATALOG | NULL | |
| UNIQUE_CONSTRAINT_SCHEMA | ||
| UNIQUE_CONSTRAINT_NAME | ||
| MATCH_OPTION | ||
| UPDATE_RULE | ||
| DELETE_RULE | ||
| TABLE_NAME | ||
| REFERENCED_TABLE_NAME |
注:
REFERENTIAL_CONSTRAINTSテーブルは MySQL 5.1.10 に追加されています。REFERENCED_TABLE_NAMEカラムは MySQL 5.1.16 に追加されています。TABLE_NAMEはINFORMATION_SCHEMA.TABLE_CONSTRAINTSのTABLE_NAMEと同じ値を持っています。CONSTRAINT_SCHEMAおよびCONSTRAINT_NAMEは外部キーを認識します。UNIQUE_CONSTRAINT_SCHEMA、UNIQUE_CONSTRAINT_NAME、およびREFERENCED_TABLE_NAMEは参照キーを認識します。(注:MySQL 5.1.16 以前のバージョンは、UNIQUE_CONSTRAINT_NAMEは制約ではなく間違って参照テーブルを指定しています。この段階の
MATCH_OPTIONの唯一有効な値はNONEです。UPDATE_RULEあるいはDELETE_RULEの可能な値はCASCADE、SET NULL,SET DEFAULT、RESTRICT、NO ACTIONです。
GLOBAL_STATUS および
SESSION_STATUS
テーブルはサーバーのステータス変数に関する情報を提供します。それらの中身は
SHOW GLOBAL STATUS および SHOW
SESSION STATUS ステートメント
(「SHOW STATUS 構文」 参照)
が生成する情報に一致します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
| VARIABLE_NAME | Variable_name | |
| VARIABLE_VALUE | Value |
注:
GLOBAL_STATUSおよびSESSION_STATUSテーブルは MySQL 5.1.12 に追加されています。VARIABLE_VALUEカラムにはBIGINTタイプがあります。非整数値を持ついくつかのステータス変数はBIGINT値に組み込まれています。
GLOBAL_VARIABLES および
SESSION_VARIABLES
テーブルはサーバーのステータス変数に関する情報を提供します。それらの中身は
SHOW GLOBAL VARIABLES および SHOW
SESSION VARIABLES ステートメント
(「SHOW VARIABLES 構文」参照)
が生成した情報に一致します。
INFORMATION_SCHEMA
名 | SHOW 名 | 備考 |
| VARIABLE_NAME | Variable_name | |
| VARIABLE_VALUE | Value |
注:
GLOBAL_VARIABLESおよびSESSION_VARIABLESテーブルは MySQL 5.1.12 に追加されています。
今後さらに INFORMATION_SCHEMA
テーブルを追加する予定です。特に、PARAMETERS
テーブルの必要性を強く感じています。
SHOW
ステートメントのいくつかの拡張は
INFORMATION_SCHEMA の実装を伴います。
SHOWをINFORMATION_SCHEMAそのものの構成に関す情報を取得するために使用できます。いくつかの
SHOWステートメントにはどの行を表示するかを指定する際に柔軟性を提供するWHERE節を使用できます。
INFORMATION_SCHEMA
は情報のデータベースで、その名前は SHOW
DATABASES
の出力に含まれています。同様に、SHOW
TABLES を INFORMATION_SCHEMA
と一緒に使用してそのテーブルのリストを取得できます。
mysql> SHOW TABLES FROM INFORMATION_SCHEMA;
+---------------------------------------+
| Tables_in_information_schema |
+---------------------------------------+
| CHARACTER_SETS |
| COLLATIONS |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS |
| COLUMN_PRIVILEGES |
| ENGINES |
| EVENTS |
| FILES |
| KEY_COLUMN_USAGE |
| PARTITIONS |
| PLUGINS |
| PROCESSLIST |
| ROUTINES |
| SCHEMATA |
| SCHEMA_PRIVILEGES |
| STATISTICS |
| TABLES |
| TABLE_CONSTRAINTS |
| TABLE_PRIVILEGES |
| TRIGGERS |
| USER_PRIVILEGES |
| VIEWS |
+---------------------------------------+
22 rows in set (0.04 sec)
SHOW COLUMNS および
DESCRIBE は個々の
INFORMATION_SCHEMA
テーブルのカラムに関する情報を表示できます。
いくつかの SHOW ステートメントは
WHERE
節を使用できるように拡張されています。
SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW DATABASES SHOW FUNCTION STATUS SHOW KEYS SHOW OPEN TABLES SHOW PROCEDURE STATUS SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES
WHERE 節がある場合、それは
SHOW
ステートメントで表示されるカラム名で評価されます。例えば、SHOW
CHARACTER SET
ステートメントはこれらの出力カラムを生成します。
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
...
WHERE 節を SHOW CHARACTER
SET
と一緒に使用する場合、それらのカラム名を参照します。例えば、以下のステートメントはデフォルトの照合が文字列
'japanese'
を含む文字セットに関する情報を表示します。
mysql> SHOW CHARACTER SET WHERE `Default collation` LIKE '%japanese%';
+---------+---------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------------------+---------------------+--------+
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+---------+---------------------------+---------------------+--------+
このステートメントは複数バイトの文字セットを表示します。
mysql> SHOW CHARACTER SET WHERE Maxlen > 1;
+---------+---------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+---------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+---------+---------------------------+---------------------+--------+