無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

第21章 INFORMATION_SCHEMA データベース

INFORMATION_SCHEMA はデータベース メタデータへのアクセスを提供します。

メタデータ は、データベース名またはテーブル名、カラムのデータタイプ、あるいはアクセス権限などのデータに関するデータです。この情報に時々使用される他の用語にはデータ ディクショナリおよびシステム カタログがあります。

INFORMATION_SCHEMA は情報のデータベースで、MySQL サーバーが保持する他のすべてのデータベースに関する情報を保存しています。INFORMATION_SCHEMA の中にはいくつかの読み出し専用テーブルがあります。それらは実際はベーステーブルではなく表示ですので、それらに関連付けされたファイルはありません。

実際には INFORMATION_SCHEMA という名前のデータベースがありますが、その名前ではサーバーはデータベース ディレクトリを作成しません。INFORMATION_SCHEMAUSE ステートメントでデフォルトのデータベースとして選択できますが、それはテーブルのコンテンツを読むことしかできません。挿入、更新、および削除はできません。

ここに 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 DATABASESSHOW 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 のテーブルでは COLLATIONTABLE_COLLATION に変更しています。)本件の最後にある予約した単語のリストを参照してください。 http://www.dbazine.com/gulutzan5.shtml.

文字列の定義 (例えば、TABLES.TABLE_NAME) は一般的には VARCHAR(N) CHARACTER SET utf8 で、そこでは N は少なくとも 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 を参照してください。

21.1. INFORMATION_SCHEMA SCHEMATA テーブル

スキーマはデータベースで、SCHEMATA テーブルはデータベースに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
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']

21.2. INFORMATION_SCHEMA TABLES テーブル

TABLES テーブルはデータベースのテーブルに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG NULL
TABLE_SCHEMATable_... 
TABLE_NAMETable_... 
TABLE_TYPE  
ENGINEEngineMySQL 拡張
VERSIONVersionMySQL 拡張
ROW_FORMATRow_formatMySQL 拡張
TABLE_ROWSRowsMySQL 拡張
AVG_ROW_LENGTHAvg_row_lengthMySQL 拡張
DATA_LENGTHData_lengthMySQL 拡張
MAX_DATA_LENGTHMax_data_lengthMySQL 拡張
INDEX_LENGTHIndex_lengthMySQL 拡張
DATA_FREEData_freeMySQL 拡張
AUTO_INCREMENTAuto_incrementMySQL 拡張
CREATE_TIMECreate_timeMySQL 拡張
UPDATE_TIMEUpdate_timeMySQL 拡張
CHECK_TIMECheck_timeMySQL 拡張
TABLE_COLLATIONCollationMySQL 拡張
CHECKSUMChecksumMySQL 拡張
CREATE_OPTIONSCreate_optionsMySQL 拡張
TABLE_COMMENTCommentMySQL 拡張

  • TABLE_SCHEMA および TABLE_NAMESHOW ディスプレーの単一の領域で、例えばTable_in_db1 のようになります。

  • TABLE_TYPEBASE 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
  [FROM db_name]
  [LIKE 'wild']

21.3. INFORMATION_SCHEMA COLUMNS テーブル

COLUMNS テーブルはテーブルのカラムに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAMEField 
ORDINAL_POSITION 注を参照
COLUMN_DEFAULTDefault 
IS_NULLABLENull 
DATA_TYPEType 
CHARACTER_MAXIMUM_LENGTHType 
CHARACTER_OCTET_LENGTH  
NUMERIC_PRECISIONType 
NUMERIC_SCALEType 
CHARACTER_SET_NAME  
COLLATION_NAMECollation 
COLUMN_TYPETypeMySQL 拡張
COLUMN_KEYKeyMySQL 拡張
EXTRAExtraMySQL 拡張
COLUMN_COMMENTCommentMySQL 拡張

  • SHOW では、Type 表示は異なるいくつかの COLUMNS カラムの値を含んでいます。

  • ORDINAL_POSITIONORDER BY ORDINAL_POSITION をいう場合があり場合がありますので必要です。SHOW とは異なり、SELECT には自動オーダーリングはありません。

  • CHARACTER_OCTET_LENGTH は、マルチバイトの文字セットを除いては CHARACTER_MAXIMUM_LENGTH と同じでなければなりません。

  • CHARACTER_SET_NAMECollation から得られます。例えば、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
  FROM tbl_name
  [FROM db_name]
  [LIKE 'wild']

21.4. INFORMATION_SCHEMA STATISTICS テーブル

STATISTICS テーブルはテーブル インデックスの情報を提供します。

INFORMATION_SCHEMASHOW備考
TABLE_CATALOG NULL
TABLE_SCHEMA = データベース
TABLE_NAMETable 
NON_UNIQUENon_unique 
INDEX_SCHEMA = Database
INDEX_NAMEKey_name 
SEQ_IN_INDEXSeq_in_index 
COLUMN_NAMEColumn_name 
COLLATIONCollation 
CARDINALITYCardinality 
SUB_PARTSub_partMySQL 拡張
PACKEDPackedMySQL 拡張
NULLABLENullMySQL 拡張
INDEX_TYPEIndex_typeMySQL 拡張
COMMENTCommentMySQL 拡張

  • インデックスには標準のテーブルはありません。前のリストは SQL サーバ 2000 が sp_statistics に返すものと、QUALIFIERCATALOG に、 OWNERSCHEMA に置き換えた事を除いては類似しています。

    明らかに、前のテーブルおよび SHOW INDEX の出力は同じ親に由来しています。ですから相関関係は既に閉じています。

以下のステートメントは等価です。

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']

SHOW INDEX
  FROM tbl_name
  [FROM db_name]

21.5. INFORMATION_SCHEMA USER_PRIVILEGES テーブル

USER_PRIVILEGESテーブルはグルーバル権限に関する情報を提供します。この情報は mysql.user グラントテーブルにあります。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name' 値、MySQL 拡張
TABLE_CATALOG NULL, MySQL 拡張
PRIVILEGE_TYPE MySQL 拡張
IS_GRANTABLE MySQL 拡張

  • これは非標準のテーブルです。その値は mysql.user のテーブルにあります。

21.6. INFORMATION_SCHEMA SCHEMA_PRIVILEGES テーブル

SCHEMA_PRIVILEGES テーブルはスキーマ(データベース) 権限に関する情報を提供します。この情報は mysql.user グラントテーブルにあります。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name' 値、MySQL 拡張
TABLE_CATALOG NULL, MySQL 拡張
TABLE_SCHEMA MySQL 拡張
PRIVILEGE_TYPE MySQL 拡張
IS_GRANTABLE MySQL 拡張

  • これは非標準のテーブルです。その値は mysql.db テーブルにあります。

21.7. INFORMATION_SCHEMA TABLE_PRIVILEGES テーブル

TABLE_PRIVILEGES テーブルはテーブル権限に関する情報を提供します。この情報は mysql.tables_priv グラント テーブルにあります。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name'
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  

  • PRIVILEGE_TYPE はこれらの値の 1 つ(1 つのみ)を含むことができます。SELECTINSERTUPDATEREFERENCESALTERINDEXDROPCREATE VIEW

以下のステートメントは等価ではありません。

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES

SHOW GRANTS ...

21.8. INFORMATION_SCHEMA COLUMN_PRIVILEGES テーブル

COLUMN_PRIVILEGES テーブルはカラムの権限に関する情報を提供します。この情報は mysql.columns_priv グラント テーブルにあります。

INFORMATION_SCHEMASHOW備考
GRANTEE 'user_name'@'host_name'
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  

  • SHOW FULL COLUMNS の出力では、権限はすべて 1 つの領域にあり小文字です。例えば、select,insert,update,referencesCOLUMN_PRIVILEGES では、行ごとに 1 つの権限があり、大文字です。

  • PRIVILEGE_TYPE はこれらの値の 1 つ(1 つのみ)を含むことができます。SELECTINSERTUPDATEREFERENCES

  • ユーザーに GRANT OPTION の権限がある場合、IS_GRANTABLEYES になります。権限が無い場合、IS_GRANTABLENO になります。その出力は GRANT OPTION を個別の権限としてリストしません。

以下のステートメントは等価ではありません。

SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES

SHOW GRANTS ...

21.9. INFORMATION_SCHEMA CHARACTER_SETS テーブル

CHARACTER_SETS テーブルは利用できる文字セットに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
CHARACTER_SET_NAMECharset 
DEFAULT_COLLATE_NAMEDefault collation 
DESCRIPTIONDescriptionMySQL 拡張
MAXLENMaxlenMySQL 拡張

以下のステートメントは等価です。

SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
  [WHERE name LIKE 'wild']

SHOW CHARACTER SET
  [LIKE 'wild']

21.10. INFORMATION_SCHEMA COLLATIONS テーブル

COLLATIONS テーブルは各文字セットの照合に関する情報を提供します。

INFORMATION_SCHEMASHOW備考
COLLATION_NAMECollation 
CHARACTER_SET_NAMECharsetMySQL 拡張
IDIdMySQL 拡張
IS_DEFAULTDefaultMySQL 拡張
IS_COMPILEDCompiledMySQL 拡張
SORTLENSortlenMySQL 拡張

以下のステートメントは等価です。

SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
  [WHERE collation_name LIKE 'wild']

SHOW COLLATION
  [LIKE 'wild']

21.11. INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY テーブル

COLLATION_CHARACTER_SET_APPLICABILITY テーブルはどの文字セットがどの照合に適用できるかを示します。カラムは SHOW COLLATION から取得する最初の 2 つの表示領域に等価です。

INFORMATION_SCHEMASHOW備考
COLLATION_NAMECollation 
CHARACTER_SET_NAMECharset 

21.12. INFORMATION_SCHEMA TABLE_CONSTRAINTS テーブル

TABLE_CONSTRAINTS テーブルはどのテーブルに制約があるかを説明します。

INFORMATION_SCHEMASHOW備考
CONSTRAINT_CATALOG NULL
CONSTRAINT_SCHEMA  
CONSTRAINT_NAME  
TABLE_SCHEMA  
TABLE_NAME  
CONSTRAINT_TYPE  

  • CONSTRAINT_TYPE 値は UNIQUEPRIMARY KEY、あるいは FOREIGN KEY になります。

  • UNIQUE および PRIMARY KEY 情報は Non_unique 領域が 0 のとき SHOW INDEX の出力の Key_name 領域から得られる情報とほぼ同じになります。

  • CONSTRAINT_TYPE カラムはこれらの値のどれか 1 つを含みます。UNIQUEPRIMARY KEYFOREIGN KEYCHECK。これは CHAR (非 ENUM) カラムです。CHECK 値は CHECK をサポートするまでは利用できません。

21.13. INFORMATION_SCHEMA KEY_COLUMN_USAGE テーブル

KEY_COLUMN_USAGE テーブルはどのキーカラムがに制約があるかを説明します。

INFORMATION_SCHEMASHOW備考
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 つのテーブル名 t1t3 あるとします。

    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.

21.14. INFORMATION_SCHEMA ROUTINES テーブル

ROUTINES テーブルは保存されたルーチン(プロシージャおよび関数の両方) に関する情報を提供します。ROUTINES テーブルはこの段階ではユーザー定義の関数 (UDF) を含みません。

mysql.proc」 の名前のカラムは INFORMATION_SCHEMA.ROUTINES テーブル カラムに相当する mysql.proc テーブル カラムを意味します。

INFORMATION_SCHEMAmysql.proc備考
SPECIFIC_NAMEspecific_name 
ROUTINE_CATALOG NULL
ROUTINE_SCHEMAdb 
ROUTINE_NAMEname 
ROUTINE_TYPEtype{PROCEDURE|FUNCTION}
DTD_IDENTIFIER (データタイプ デスクリプター)
ROUTINE_BODY SQL
ROUTINE_DEFINITIONbody 
EXTERNAL_NAME NULL
EXTERNAL_LANGUAGElanguageNULL
PARAMETER_STYLE SQL
IS_DETERMINISTICis_deterministic 
SQL_DATA_ACCESSsql_data_access 
SQL_PATH NULL
SECURITY_TYPEsecurity_type 
CREATEDcreated 
LAST_ALTEREDmodified 
SQL_MODEsql_modeMySQL 拡張
ROUTINE_COMMENTcommentMySQL 拡張
DEFINERdefinerMySQL 拡張

  • MySQL は EXTERNAL_LANGUAGE をこのように計算します。

    • mysql.proc.language='SQL' の場合、EXTERNAL_LANGUAGENULL

    • そうでない場合、EXTERNAL_LANGUAGEmysql.proc.language にあります。しかし、まだ外部言語がないので、それは常に NULL です。

21.15. INFORMATION_SCHEMA VIEWS テーブル

VIEWS テーブルはデータベースの表示に関する情報を提供します。このテーブルにアクセスするには SHOW VIEW の権限が必要です。

INFORMATION_SCHEMASHOW備考
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 の値があります。

21.16. INFORMATION_SCHEMA TRIGGERS テーブル

TRIGGERS テーブルはトリガに関する情報を提供します。このテーブルにアクセスするには SUPER 権限が必要です。

INFORMATION_SCHEMASHOW備考
TRIGGER_CATALOG NULL
TRIGGER_SCHEMA  
TRIGGER_NAMETrigger 
EVENT_MANIPULATIONEvent 
EVENT_OBJECT_CATALOG NULL
EVENT_OBJECT_SCHEMA  
EVENT_OBJECT_TABLETable 
ACTION_ORDER 0
ACTION_CONDITION NULL
ACTION_STATEMENTStatement 
ACTION_ORIENTATION ROW
ACTION_TIMINGTiming 
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 システム変数と同じです。項4.2.6. 「SQL モード」 を参照してください。

  • DEFINER カラムが MySQL 5.1.2 に追加されました。DEFINER は誰がトリガを定義したかを示します。

  • 以下のカラムは常に NULL を含みます。TRIGGER_CATALOGEVENT_OBJECT_CATALOGACTION_CONDITIONACTION_REFERENCE_OLD_TABLEACTION_REFERENCE_NEW_TABLE、および CREATED

項18.3. 「トリガの使用」 で定義された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

項12.5.4.29. 「SHOW TRIGGERS 構文」 も参照してください。

21.17. INFORMATION_SCHEMA PLUGINS テーブル

PLUGINS テーブルはサーバーのプラグインに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
PLUGIN_NAMENameMySQL 拡張
PLUGIN_VERSION MySQL 拡張
PLUGIN_STATUSStatusMySQL 拡張
PLUGIN_TYPETypeMySQL 拡張
PLUGIN_TYPE_VERSION MySQL 拡張
PLUGIN_LIBRARYLibraryMySQL 拡張
PLUGIN_LIBRARY_VERSION MySQL 拡張
PLUGIN_AUTHOR MySQL 拡張
PLUGIN_DESCRIPTION MySQL 拡張

  • PLUGINS テーブルは非標準のテーブルです。MySQL 5.1.5 に追加されました。

項12.5.4.20. 「SHOW PLUGINS 構文」 も参照してください。

21.18. INFORMATION_SCHEMA ENGINES テーブル

PLUGINS テーブルはストレージ エンジンに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
ENGINEEngineMySQL 拡張
SUPPORTSupportMySQL 拡張
COMMENTCommentMySQL 拡張
TRANSACTIONSTransactionsMySQL 拡張
XAXAMySQL 拡張
SAVEPOINTSSavepointsMySQL 拡張

  • ENGINES テーブルは非標準のテーブルです。MySQL 5.1.5 に追加されました。

項12.5.4.13. 「SHOW ENGINES 構文」 も参照してください。

21.19. INFORMATION_SCHEMA PARTITIONS テーブル

PARTITIONS テーブルはテーブルの分割に関する情報を提供します。テーブルの分割に関する詳細は 章 15. パーティショニング を参照してください。

INFORMATION_SCHEMASHOW備考
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:RANGELISTHASHLINEAR HASHKEY、あるいは LINEAR KEY のいずれかの値です。つまり、 項15.2. 「パーティショニングのタイプ」 で説明した利用できる分割タイプの 1 つです。

  • SUBPARTITION_METHOD:HASHLINEAR HASHKEY あるいは LINEAR KEY のいずれかの値の 1 つです。つまり、項15.2.5. 「サブパーティショニング」 で説明したサブ利用できる分割タイプの 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_METHODRANGE あるいは 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、あるいは DESCRIBE the PARTITIONS から SELECT することはできません。MySQL 5.1.5 あるいはそれ以前のバージョンから MySQL 5.1.6 およびそれ以降にアップグレードする前に 項C.1.11. 「Changes in release 5.1.6 (01 February 2006)」 参照してください。

  • 非分割のテーブルには INFORMATION_SCHEMA.PARTITIONS にレコードが 1 つあります。しかし、PARTITION_NAMESUBPARTITION_NAMEPARTITION_ORDINAL_POSITIONSUBPARTITION_ORDINAL_POSITIONPARTITION_METHODSUBPARTITION_METHODPARTITION_EXPRESSIONSUBPARTITION_EXPRESSION、および PARTITION_DESCRIPTION カラムの値はすべて NULL です。(この場合の PARTITION_COMMENT のカラムは空白です。)

    MySQL 5.1 には、PARTITIONS テーブルに NDBCluster ストレージ エンジンを使用したテーブルに対しレコードが 1 つだけあります。同じカラムはまた非分割テーブルに対しては NULL (あるいは空) です。

21.20. INFORMATION_SCHEMA EVENTS テーブル

EVENTS テーブルは 章 19. Event Scheduler で説明した計画したイベントに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
EVENT_CATALOG NULL, MySQL 拡張
EVENT_SCHEMADbMySQL 拡張
EVENT_NAMENameMySQL 拡張
DEFINERDefinerMySQL 拡張
EVENT_BODY MySQL 拡張
EVENT_DEFINITION MySQL 拡張
EVENT_TYPETypeMySQL 拡張
EXECUTE_ATExecute atMySQL 拡張
INTERVAL_VALUEInterval valueMySQL 拡張
INTERVAL_FIELDInterval fieldMySQL 拡張
SQL_MODE MySQL 拡張
STARTSStartsMySQL 拡張
ENDSEndsMySQL 拡張
STATUSStatusMySQL 拡張
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@ghidorae_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)

重要STARTSENDS、および LAST_EXECUTED カラムで表示された時間はサーバーのタイムゾーンの設定にかかわらず現在の世界時 (GMT あるいは UTC) で表示されます。mysql.event テーブルのstartsends、および 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 参照)

項12.5.4.15. 「SHOW EVENTS も参照してください。

21.21. INFORMATION_SCHEMA FILES テーブル

FILES テーブルは MySQL NDB ディスクデータ テーブルが保存されるファイルに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
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_NAMECREATE LOGFILE GROUP あるいは ALTER LOGFILE GRUOP によって作成された UNDO ログファイルの名前です。または CREATE TABLESPACE あるいは ALTER TABLESPACE で作成されたデータファイルです。

  • FILE_TYPEUNDOFILE あるいは 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_EXTENTSEXTENT_SIZE 乗算することで予測できます。

    SELECT FREE_EXTENTS * EXTENT_SIZE AS bytes_free
        FROM INFORMATION_SCHEMA.FILES
        WHERE FILE_NAME = 'myfile.dat';    
    

    重要上記のクエリで生成されたバイトの値は概算のみで、その正確性は EXTENT_SIZE の値に逆比例します。つまり、EXTENT_SIZE が大きくなれば、概算の正確性は落ちます。

    拡張が一度使用されるとそれが属すデータファイルをドロップせずにはそれを自由に出来ないことを覚えておく必要があります。このことは、ディスクデータのテーブルからの削除はディスクスペースを増やさないということです。

    拡張サイズは CREATE TABLESPACE ステートメントで設定できます。詳細については、項12.1.10. 「CREATE TABLESPACE 構文」 をご参照してください。

  • INITIAL_SIZE カラムはファイルのサイズをバイトで表示します。これはファイルの作成に使用された CREATE LOGFILE GROUP、ALTER LOGFILE GROUPCREATE TABLESPACE、あるいは ALTER TABLESPACEINITIAL_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 です。

    • VERSION

    • ROW_FORMAT

    • TABLE_ROWS

    • AVG_ROW_LENGTH

    • DATA_LENGTH

    • MAX_DATA_LENGTH

    • INDEX_LENGTH

    • DATA_FREE

    • CREATE_TIME

    • UPDATE_TIME

    • CHECK_TIME

    • CHECKSUM

  • 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 テーブルを使用してクラスタ ディスク データ テーブルに関する情報の取得に関する他の例については 項14.11. 「MySQL Cluster ディスク データ ストレージ」 を参照してください。

21.22. INFORMATION_SCHEMA PROCESSLIST テーブル

PROCESSLIST テーブルは動作しているスレッドに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
IDIdMySQL 拡張
USERUserMySQL 拡張
HOSTHostMySQL 拡張
DBdbMySQL 拡張
COMMANDCommandMySQL 拡張
TIMETimeMySQL 拡張
STATEStateMySQL 拡張
INFOInfoMySQL 拡張

テーブル カラムの全体的な説明については 項12.5.4.24. 「SHOW PROCESSLIST 構文」 を参照してください。

  • PROCESSLIST テーブルは非標準のテーブルです。それは MySQL 5.1.7 に追加されています。

  • 相当する SHOW ステートメントの出力と同様、PROCESSLIST テーブルは PROCESS の権限が無い場合は、お客様のスレッドに関する情報のみ表示されます。権限がある場合には他のスレッドに関する情報も表示できます。匿名のユーザーはどの行も見ることはできません。

  • SQL ステートメントが INFORMATION_SCHEMA.PROCESSLIST を参照している場合、ステートメントの実行が開始されると全体のテーブルを一度表示します。それでステートメント中の読み取りの一貫性が保たれます。複数のステートメントのトランザクションではリードの一貫性はありません。

以下のステートメントは等価です。

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST

SHOW PROCESSLIST

21.23. INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS テーブル

REFERENTIAL_CONSTRAINTS テーブルは外部キーに関する情報を提供します。

INFORMATION_SCHEMASHOW備考
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_NAMEINFORMATION_SCHEMA.TABLE_CONSTRAINTSTABLE_NAME と同じ値を持っています。

  • CONSTRAINT_SCHEMA および CONSTRAINT_NAME は外部キーを認識します。

  • UNIQUE_CONSTRAINT_SCHEMAUNIQUE_CONSTRAINT_NAME、および REFERENCED_TABLE_NAME は参照キーを認識します。(注:MySQL 5.1.16 以前のバージョンは、UNIQUE_CONSTRAINT_NAME は制約ではなく間違って参照テーブルを指定しています。

  • この段階の MATCH_OPTION の唯一有効な値は NONE です。

  • UPDATE_RULE あるいは DELETE_RULE の可能な値は CASCADESET NULL, SET DEFAULTRESTRICTNO ACTION です。

21.24. INFORMATION_SCHEMA GLOBAL_STATUS および SESSION_STATUS テーブル

GLOBAL_STATUS および SESSION_STATUS テーブルはサーバーのステータス変数に関する情報を提供します。それらの中身は SHOW GLOBAL STATUS および SHOW SESSION STATUS ステートメント (項12.5.4.26. 「SHOW STATUS 構文」 参照) が生成する情報に一致します。

INFORMATION_SCHEMASHOW備考
VARIABLE_NAMEVariable_name 
VARIABLE_VALUEValue 

  • GLOBAL_STATUS および SESSION_STATUS テーブルは MySQL 5.1.12 に追加されています。

  • VARIABLE_VALUE カラムには BIGINT タイプがあります。非整数値を持ついくつかのステータス変数は BIGINT 値に組み込まれています。

21.25. INFORMATION_SCHEMA GLOBAL_VARIABLES および SESSION_VARIABLES テーブル

GLOBAL_VARIABLES および SESSION_VARIABLES テーブルはサーバーのステータス変数に関する情報を提供します。それらの中身は SHOW GLOBAL VARIABLES および SHOW SESSION VARIABLES ステートメント (項12.5.4.30. 「SHOW VARIABLES 構文」参照) が生成した情報に一致します。

INFORMATION_SCHEMASHOW備考
VARIABLE_NAMEVariable_name 
VARIABLE_VALUEValue 

  • GLOBAL_VARIABLES および SESSION_VARIABLES テーブルは MySQL 5.1.12 に追加されています。

21.26. その他の INFORMATION_SCHEMA テーブル

今後さらに INFORMATION_SCHEMA テーブルを追加する予定です。特に、PARAMETERS テーブルの必要性を強く感じています。

21.27. SHOW ステートメントへの拡張

SHOW ステートメントのいくつかの拡張は INFORMATION_SCHEMA の実装を伴います。

  • SHOWINFORMATION_SCHEMA そのものの構成に関す情報を取得するために使用できます。

  • いくつかの SHOW ステートメントにはどの行を表示するかを指定する際に柔軟性を提供する WHERE 節を使用できます。

INFORMATION_SCHEMA は情報のデータベースで、その名前は SHOW DATABASES の出力に含まれています。同様に、SHOW TABLESINFORMATION_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 |
+---------+---------------------------+---------------------+--------+

powered by SEO.CUG.NET