MySQL 5.6 リファレンスマニュアル  /  INFORMATION_SCHEMA テーブル  /  INFORMATION_SCHEMA VIEWS テーブル

21.28 INFORMATION_SCHEMA VIEWS テーブル

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

INFORMATION_SCHEMA SHOW 備考
TABLE_CATALOG def
TABLE_SCHEMA
TABLE_NAME
VIEW_DEFINITION
CHECK_OPTION
IS_UPDATABLE
DEFINER
SECURITY_TYPE
CHARACTER_SET_CLIENT MySQL 拡張
COLLATION_CONNECTION MySQL 拡張

:

  • 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 カラムは、NONECASCADE、または LOCAL の値になります。

  • MySQL は、CREATE VIEW 時に、ビューの更新可能性フラグというフラグを設定します。UPDATE および DELETE (および同様の操作) がビューで有効な場合、フラグは YES (true) に設定されます。それ以外の場合、フラグは NO (false) に設定されます。VIEWS テーブルの IS_UPDATABLE カラムは、このフラグのステータスを表示します。これは、ビューが更新可能であるかどうかをサーバーが常に把握していることを意味します。ビューが更新可能ではない場合、UPDATEDELETEINSERT などのステートメントは無効であり、拒否されます。(ビューが更新可能な場合でも、挿入できない場合があります。詳細は、セクション13.1.20「CREATE VIEW 構文」を参照してください。)

  • DEFINER: 'user_name'@'host_name' 形式で示した、ビューを作成したユーザーのアカウントです。SECURITY_TYPE には、DEFINER または INVOKER の値があります。

  • CHARACTER_SET_CLIENT: ビューが作成されたときの character_set_client システム変数のセッション値です。

  • COLLATION_CONNECTION: ビューが作成されたときの collation_connection システム変数のセッション値です。

MySQL では、異なる sql_mode 設定を使用すると、サポートする SQL 構文のタイプをサーバーに指示できます。たとえば、ANSI SQL モードを使用すると、クエリーで、MySQL で標準 SQL 連結演算子の二重バー (||) が正しく解釈されます。その後、項目を連結するビューを作成した場合、sql_mode 設定を ANSI とは別の値に変更すると、そのビューが無効になるという懸念がある場合があります。ただし、そのようなことはありません。MySQL は、記述方法には関係なく、常にビュー定義を正規の形式で同じ方法で格納します。サーバーが二重バーの連結演算子を CONCAT() 関数にどのように変更するかを示す例を次に示します。

mysql> SET sql_mode = 'ANSI';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE VIEW test.v AS SELECT 'a' || 'b' as col1;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
    -> WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';
+----------------------------------+
| VIEW_DEFINITION                  |
+----------------------------------+
| select concat('a','b') AS `col1` |
+----------------------------------+
1 row in set (0.00 sec)

ビュー定義を正規の形式で格納する利点は、あとで sql_mode の値を変更しても、ビューの結果に影響を与えないことにあります。ただし、SELECT の前にあるコメントが、サーバーによって定義から取り除かれるというその他の影響があります。


User Comments
  Posted by Troels on June 13, 2006
Theese queries may come in handy:

# list all views
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.VIEWS;

# describe view
# replace ? with view name
SELECT VIEW_DEFINITION
FROM INFORMATION_SCHEMA.VIEWS
WHERE
TABLE_NAME = ?;

# describe view prettyprinted
# replace ? with view name
SELECT REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(VIEW_DEFINITION, ",", "\n"),
"from", "\nfrom"), "where", "\nwhere"), "join", "\njoin"), "and", "\nand")
FROM INFORMATION_SCHEMA.VIEWS
WHERE
TABLE_NAME = ?;

Sign Up Login You must be logged in to post a comment.