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
カラムは、NONE
、CASCADE
、またはLOCAL
の値になります。MySQL は、
CREATE VIEW
時に、ビューの更新可能性フラグというフラグを設定します。UPDATE
およびDELETE
(および同様の操作) がビューで有効な場合、フラグはYES
(true) に設定されます。それ以外の場合、フラグはNO
(false) に設定されます。VIEWS
テーブルのIS_UPDATABLE
カラムは、このフラグのステータスを表示します。これは、ビューが更新可能であるかどうかをサーバーが常に把握していることを意味します。ビューが更新可能ではない場合、UPDATE
、DELETE
、INSERT
などのステートメントは無効であり、拒否されます。(ビューが更新可能な場合でも、挿入できない場合があります。詳細は、セクション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
の前にあるコメントが、サーバーによって定義から取り除かれるというその他の影響があります。