説明
このステートメントは、ビューを作成するために使用します。
使用上の制限と注意事項
ビューはデータベース内では実際にはテーブルの形で存在するわけではありません。ビューは
CREATE VIEWステートメントで指定されたSELECTステートメントの結果として派生され、使用するたびに再生成されます。FROM句で2つ以上のテーブルまたはビューが参照されている場合、そのビューは結合ビュー(Join View)と呼ばれます。更新可能な結合ビュー、または変更可能な結合ビューは、2つ以上のベーステーブルまたはビューに関連し、DML操作を許可します。更新可能なビューはWITH READ ONLY句の制限を受けません。ビューの更新可能性を確保するためには、一連の特定条件を満たす必要があります。一般的なルールの1つは、結合ビューに対して
INSERT、UPDATE、またはDELETE操作を実行する場合、操作は単一のベーステーブルに対してのみ変更を加えることができるというものです。
権限要件
CREATE VIEW ステートメントを実行するには、現在のユーザーが CREATE VIEW 権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
CREATE [OR REPLACE] VIEW view_name[(column_name_list)]
AS select_stmt
[check_option];
column_name_list:
column_name [, column_name ...]
check_option:
WITH CHECK OPTION
| WITH CASCADED CHECK OPTION
| WITH LOCAL CHECK OPTION
パラメータの説明
パラメータ |
説明 |
|---|---|
| OR REPLACE | オプションです。作成しようとするビュー名が既に存在する場合、新しい定義でビューを再作成し、既存のビューを置き換えます。 |
| view_name | ビュー名を指定します。 |
| column_name_list | オプションです。ビューの列名リストを指定します。列名リストを指定しない場合、SELECT ステートメントで取得した列名がビューの列名として使用されます。SELECT ステートメントで取得する列は、テーブル列への単純な参照の場合もあれば、関数、定数値、演算子などを使用した式の場合もあります。ビューの列名には以下の制限があります:
|
| select_stmt | ビューを定義するクエリ(SELECT)ステートメントです。これにより、ベーステーブルや他のビューから選択できるビューの定義が示されます。クエリステートメントの具体的な構造とオプションについては、SELECTステートメントを参照してください。 |
| check_option | オプションです。ビューのチェック範囲を指定し、ビューへの挿入・更新操作を制限します。チェック範囲の詳細については、後述の check_option を参照してください。 |
check_option
WITH CHECK OPTION:ビューを作成する際の構文であり、挿入または更新されるデータがビューの定義条件を満たすことを保証します。MySQLモードでは、WITH CHECK OPTION 句は LOCAL/CASCADED キーワードと組み合わせて使用することもでき、データチェックの範囲をさらに指定できます。
WITH CASCADED CHECK OPTION:本ビューをチェックし、参照されているすべてのビューに対して再帰的にチェックします。WITH LOCAL CHECK OPTION:本ビューをチェックし、参照されているビューに対してチェックを行うかどうかは、参照先ビューの定義によって決まります。
OceanBaseデータベースは、ビューのフィルター条件(where_clause)にサブクエリを含む場合に WITH CHECK OPTION 句を指定することもサポートしています。
注意
フィルター条件で WITH CHECK OPTION 句を使用する場合:
- MySQLモードでは、作成ステートメントが「更新不可ビュー」であってはなりません。
- ビュー定義では、現在
JOIN操作の使用はサポートされていません。
例
テストテーブル test_tbl1 と test_tbl2 を作成します。
obclient> CREATE TABLE test_tbl1 (col1 INT, col2 VARCHAR(50), col3 INT);
obclient> CREATE TABLE test_tbl2 (col1 INT, col2 VARCHAR(50));
テーブル
test_tbl1の列col1とcol2を選択して、ビューv1_t1を作成します。obclient> CREATE OR REPLACE VIEW v1_t1 AS SELECT col1, col2 FROM test_tbl1;WITH LOCAL CHECK OPTIONを使用してビューv2_t1を作成します。obclient> CREATE OR REPLACE VIEW v2_t1 AS SELECT * FROM test_tbl1 WHERE col1 > 0 WITH LOCAL CHECK OPTION;WITH CASCADED CHECK OPTIONを使用してビューv3_t1を作成します。obclient> CREATE OR REPLACE VIEW v3_t1 AS SELECT * FROM test_tbl1 WHERE col1 > 1 WITH CASCADED CHECK OPTION;WITH CHECK OPTIONを使用してビューv4_t1を作成します。obclient> CREATE OR REPLACE VIEW v4_t1 AS SELECT * FROM test_tbl1 WHERE col1 > 10 WITH CHECK OPTION;フィルター条件のサブクエリの後に
WITH CHECK OPTION句を指定します。obclient> CREATE OR REPLACE VIEW v5_t1_t2 AS SELECT * FROM test_tbl1 t1 WHERE EXISTS (SELECT 1 FROM test_tbl2 t2 WHERE t2.col1 = t1.col1) WITH CHECK OPTION;