10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb


13.1.20 create view構文

创建[或替换][algorithm = {undefined | merge | temptable}] [definer = {undefined |]用户视图| current_user}] [sql security {definer | invoker}view_name((column_list))select_statement使用[cascade | local]检查选项

创建视图ステトメントは,新しいビュを作成するか,または或替换句が指定されている場合は既存のビュを置き換えます。そのビュが存在しない場合,创建或替换视图创建视图と同じです。そのビュが存在する場合,创建或替换视图改变观点と同じです。

select_statementは,そのビュの定義を提供する选择ステトメントです。(ビューから選択すると、事実上、选择ステトメントを使用して選択したことになります.)select_statementは,ベステブルまたはほかのビュから選択できます。

ビュ定義は作成時に固定されるため,ベスとなるテブルへのそれ以降の変更はビュ定義に影響を与えません。たとえば,ビュがテブル上でSELECT *として定義されている場合,あとでテブルに追加された新しいカラムはそのビュの一部になりません。

算法句は,MySQLによるビュの処理方法に影響を与えます。定义者およびSQL安全句は,ビューの呼び出し時にアクセス権限を確認するときに使用されるセキュリティーコンテキストを指定します。检查选项句を指定すると,ビュによって参照されているテブル内の行への挿入または更新を制約できます。これらの句にいては,このセクションのあとの方で説明されています。

创建视图ステトメントには,このビュに対する创建视图権限と,选择ステトメントによって選択される各カラムに対する何らかの権限が必要です。选择ステトメント内の別の場所で使用されているカラムに対しては,选择権限が必要です。或替换句が存在する場合は,このビュに対する下降権限も必要です。このセクションのあとの方で説明されているように,定义者値によっては,创建视图超级権限も必要になる可能性があります。

ビュが参照されると,このセクションのあとの方で説明されている権限確認が発生します。

ビュはデタベスに属します。デフォルトでは,新しいビューはデフォルトデータベース内に作成されます。ビューを明示的に特定のデータベース内に作成するには、そのビューの作成時に、その名前をdb_name.view_nameとして指定します。

mysql>创建视图测试。v AS SELECT * FROM;

データベース内で,ベーステーブルとビューは同じ名前空間を共有するため,ベーステーブルとビューが同じ名前を持つことはできません。

选择ステトメントによって取得されるカラムは,テブルカラムへの単純な参照にすることができます。また,関数,定数値,演算子などを使用した式にすることもできます。

ビュは,ベブルと同様に,重複のない一意のカラム名を持。デフォルトでは,选择ステトメントによって取得されるカラムの名前はビュカラム名に使用されます。ビュカラムの明示的な名前を定義するには,オプションのcolumn_list句をカンマで区切られた識別子のリストとして指定できます。column_list内の名前の数は,选择ステトメントによって取得されるカラムの数と同じである必要があります。

选择ステートメント内の修飾されていないテーブルまたはビュー名は,デフォルトデータベースを基準にして解釈されます。ビューは,テーブルまたはビュー名を適切なデータベース名で修飾することによって,ほかのデータベース内のテーブルまたはビューを参照できます。

ビュは,多くの種類の选择ステトメントから作成できできます。ベステブルまたはほかのビュを参照できます。結合、联盟,およびサブクエリを使用できます。选择がテブルをまったく参照しなくてもかまいません。次の例では,別のテーブルからの2つのカラムに加え,それらのカラムから計算される式を選択するビューを定義しています。

CREATE TABLE t(数量INT,价格INT);mysql> INSERT INTO t VALUES(3,50);mysql> CREATE VIEW v AS SELECT quantity, price, qty*price AS value FROM t;mysql> SELECT * FROM;+------+-------+-------+ | 数量价格| |值  | +------+-------+-------+ | 3 | | 150  | +------+-------+-------+

ビュ定義は,次の制限に従います。

  • 选择ステトメントに句内のサブクエリを含めることはできません。

  • 选择ステトメントは,システムまたはユ変数を参照できません。

  • ストアドプログラム内で,この定義は,プログラムパラメ,タまたはロ,カル変数を参照できません。

  • 选择ステトメントは,準備済みステタを参照できません。

  • この定義で参照されているテブルまたはビュは,すべて存在する必要があります。ただし,ビュが作成されたあとは,この定義で参照されているテを削除できます。この場合は,このビュ,を使用すると,エラ,が発生します。この種類の問題に関してビュ定義を確認するには,检查表ステトメントを使用します。

  • この定義は临时テブルを参照できないため,临时ビュは作成できません。

  • ビュ定義で指定されているテブルは,すべて定義時に存在する必要があります。

  • トリガをビュに関連付けることはできません。

  • 选择ステートメント内のカラム名のエイリアスは(256文字の別名の最大の長さではなく)64文字のカラムの最大の長さに対してチェックされます。

命令はビュ定義内で許可されていますが,独自の命令を含むステトメントを使用しているビュから選択した場合は無視されます。

この定義内のその他のオプションまたは句の場合は,そのビューを参照しているステートメントのオプションまたは句に追加されますが,その効果は定義されていません。たとえば,ビュ定義に限制句が含まれているときに,独自の限制句を含むステトメントを使用しているビュから選択した場合,どの制限が適用されるかは未定義です。この同じ原則は,选择キワドに続く所有截然不同的SQL_SMALL_RESULTなどのオプションや,更新共享模式锁定过程などの句にも適用されます。

ビューを作成したあとに,システム変数の変更によってクエリー処理環境を変更すると,そのビューから得られる結果に影響を与える可能性があります。

mysql> CREATE VIEW v (mycol) AS SELECT 'abc';mysql> SET sql_mode = ";查询OK, 0 rows affected (0.00 sec) mysql> SELECT "mycol" FROM v;+-------+ | mycol  | +-------+ | mycol  | +-------+ 1行组(0.01秒)mysql >设置sql_mode =“ANSI_QUOTES”;查询OK, 0 rows affected (0.00 sec) mysql> SELECT "mycol" FROM v;+-------+ | mycol  | +-------+ | 美国广播公司  | +-------+ 1行集(0.00秒)

定义者およびSQL安全句は,そのビューを参照しているステートメントの実行時に,そのビューに対するアクセス権限を確認するときにどのMySQLアカウントを使用するかを決定します。SQL安全特性の有効な値は,定义者调用程序です。これらは,それぞれ,そのビューを定義したユーザーまたは呼び出したユーザーが必要な権限を持っている必要があることを示します。SQL安全のデフォルト値は定义者です。

定义者句に用户値を指定する場合は,user_name“@”host_name格兰特ステトメントで使用されるのと同じ形式),CURRENT_USER,またはCURRENT_USER ()として指定されたMySQLアカウントにするようにしてください。定义者のデフォルト値は,创建视图ステトメントを実行するユザです。これは,明示的に定义者= CURRENT_USERを指定するのと同じです。

定义者句を指定した場合は,次のルルによって有効な定义者ユザの値が決定されます。

  • 超级権限がない場合,有効な唯一の用户値は,リテラルで指定するか,またはCURRENT_USERを使用して指定した自分のアカウントです。定義者をほかのアカウントに設定することはできません。

  • 超级権限がある場合は,構文として有効な任意のアカウント名を指定できます。そのアカウントが実際に存在しない場合は,警告が生成されます。

  • 存在しない定义者アカウントでビュを作成することはできますが,SQL安全値が定义者であるが,定義者アカウントが存在しない場合は,そのビュ,が参照されたときにエラ,が発生します。

ビュのセキュリティの詳細は,セクション20.6 "ストアドプログラムおよびビュのアクセスコントロル"を参照してください。

ビュ定義内で,CURRENT_USERは,デフォルトではそのビュの定义者値を返します。SQL安全调用程序特性を使用して定義されたビュの場合,CURRENT_USERは,そのビュの呼び出し元のアカウントを返します。ビュ内のユザ監査にセクション6.3.13 " SQLベスのMySQLアカウントアクティビティの監査"を参照してください。

SQL安全定义者特性を使用して定義されたストアドルチン内で,CURRENT_USERは,そのルチンの定义者値を返します。ビュ定義にCURRENT_USER定义者値が含まれている場合は,これにより,このようなル,チン内で定義されたビュ,も影響を受けます。

ビュの権限は,次のように確認されます。

  • ビューの定義時に,ビュー作成者は,そのビューによってアクセスされるトップレベルのオブジェクトを使用するために必要な権限を持っている必要があります。たとえば,ビュー定義がテーブルカラムを参照している場合,作成者は,その定義の選択リスト内の各カラムに対する何らかの権限と,その定義内の別の場所で使用されている各カラムに対する选择権限を持っている必要があります。この定義がストアドファンクションを参照している場合は,その関数を呼び出すために必要な権限のみを確認できます。関数呼び出し時に必要な権限は,その関数が実行されるときにしか確認できません。別の呼び出しでは,その関数内の別の実行パスが選択される可能性があります。

  • ビューを参照するユーザーは,そのビューにアクセスするための適切な権限(そのビューから選択するための选择や,そのビュに挿入するための插入など)を持っている必要があります。

  • ビュが参照されると,そのビュによってアクセスされるオブジェクトに対する権限が,SQL安全特性が定义者または调用程序のどらであるかに応じて,それぞれ,そのビュの定义者アカウントによって保持されている権限または呼び出し元に対して確認されます。

  • ビューへの参照によってストアドファンクションが実行される場合,その関数内で実行されるステートメントの権限確認は,その関数のSQL安全特性が定义者または调用程序のどらであるかによって異なります。セキュリティ特性が定义者である場合,その関数は定义者アカウントの権限で実行されます。この特性が调用程序である場合,その関数は,そのビュ,のSQL安全特性によって決定される権限で実行されます。

例:あるビューがストアドファンクションに依存する可能性があり,さらにその関数がほかのストアドルーチンを呼び出す可能性があります。たとえば,次のビュはストアドファンクションf ()を呼び出します。

CREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name)

f ()に次のようなステトメントが含まれているとします。

如果name是NULL,那么调用p1();其他调用p2 ();如果;

f ()が実行されるとき,f ()内のステトメントを実行するために必要な権限を確認する必要があります。これは,f ()内の実行パスに応じて,p1 ()またはp2 ()に対する権限が必要であることを示します。これらの権限は実行時に確認する必要があり,それらの権限を持っている必要のあるユ,ザ,は,ビュvと関数f ()SQL安全値によって決定されます。

ビュの定义者およびSQL安全句は,標準SQLへの拡張です。標準SQLでは,ビュはSQL安全定义者のルルを使用して処理されます。標準には,ビューの定義者(これは,ビューのスキーマの所有者と同じです)はそのビューに対する該当する権限(选择など)を取得し,またそれらを付与することができると記載されています。MySQLにはスキマの所有者という概念がないため,MySQLでは定義者を識別するための句が追加されています。定义者句は,標準が備えている機能,つまり,だれがそのビューを定義したかについての永続的なレコードを備えることを目的とした拡張です。定义者のデフォルト値がビュ作成者のアカウントになっているのはそのためです。

オプションの算法句は,標準SQLへのMySQL拡張です。これは,MySQL によるビューの処理方法に影響を与えます。算法は,合并易被诱惑的,または未定义的の3の値を受け取ります。算法句が存在しない場合,デフォルトのアルゴリズムは未定义的です。詳細は,セクション20.5.2 "ビュ処理アルゴリズム"を参照してください。

いくかのビュは更新可能です。つまり,これらのビューを更新删除插入などのステトメントで使用して,ベブルの内容を更新できます。ビューが更新可能であるためには,そのビュー内の行とベースとなるテーブル内の行の間に対1の関係が存在する必要があります。また,ビュを更新不可能にするその他の特定の構造構文も存在します。

更新可能なビュに対して检查选项句を指定すると,select_statement内の在哪里句がtrueである行を除く行への挿入または更新を回避できます。

更新可能なビュに対する检查选项句では,そのビュ,が別のビュ,との関連で定義されている場合,当地的および级联キワドによってチェックテストのスコプが決定されます。当地的キワドは,检查选项を,定義されているビュのみに制限します。级联を指定すると,ベスとなるビュに対するチェックも評価されます。どらのキワドも指定されていない場合,デフォルトは级联になります。

更新可能なビュおよび检查选项句の詳細は,セクション20.5.3 "更新可能および挿入可能なビュ"を参照してください。


本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb