説明
このステートメントは、ビューを作成するために使用します。
使用上の制限と注意事項
ビューはデータベース内では実際にはテーブルの形で存在するわけではありません。ビューは
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;