MySQL 8.0 リファレンスマニュアル


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

26.48 INFORMATION_SCHEMA VIEWS テーブル

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

VIEWS テーブルには、次のカラムがあります:

  • TABLE_CATALOG

    ビューが属するカタログの名前。 この値は常に def です。

  • TABLE_SCHEMA

    ビューが属するスキーマ (データベース) の名前。

  • TABLE_NAME

    ビューの名前。

  • VIEW_DEFINITION

    ビューの定義を提供する SELECT ステートメント。 このカラムには、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

    CHECK_OPTION 属性の値。 値は、NONECASCADE または LOCAL のいずれかです。

  • IS_UPDATABLE

    MySQL は、CREATE VIEW 時に、ビューの更新可能性フラグというフラグを設定します。 UPDATE および DELETE (および同様の操作) がビューで有効な場合、フラグは YES (true) に設定されます。 それ以外の場合、フラグは NO (false) に設定されます。 VIEWS テーブルの IS_UPDATABLE カラムは、このフラグのステータスを表示します。 これは、ビューが更新可能であるかどうかをサーバーが常に把握していることを意味します。

    ビューが更新可能でない場合、UPDATEDELETE および INSERT などのステートメントは無効であり、拒否されます。 (ビューが更新可能な場合でも、ビューに挿入できない場合があります。詳細は、セクション25.5.3「更新可能および挿入可能なビュー」 を参照してください。)

  • DEFINER

    ビューを作成したユーザーのアカウント ('user_name'@'host_name'形式)。

  • SECURITY_TYPE

    ビューの SQL SECURITY 特性。 値は、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 より前のコメントはサーバーによって定義から削除されます。


関連キーワード:  SCHEMA, テーブル, INFORMATION, INNODB, TABLE, VIEWS, サーバー, ステートメント, CHECK, EXTENSIONS