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


20.5.3更新可能および挿入可能なビュ

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

  • 集計関数 (SUM ()MIN ()MAX ()COUNT ()など)

  • 截然不同的

  • 集团

  • 联盟またはUNION ALL

  • 選択リスト内のサブクエリ

  • 特定の結合(このセクションで後述する結合に関する追加説明を参照してください)

  • 句内の更新不可能なビュ

  • 句内のテブルを参照する在哪里句内のサブクエリ

  • リテラル値だけの参照(この場合,更新するベブルがありません)

  • 算法=易被诱惑的の使用(一時テブルを使用すると常にビュは更新不可能になります)

  • ベステブルのいずれかのカラムに対する複数の参照。

挿入可能性 (插入ステートメントで更新可能であること)については,更新可能なビューがビューカラムに対する次の追加要件も満たしている場合に挿入可能になります。

  • 重複したビュカラム名が存在しないようにする必要があります。

  • ビュには,デフォルト値を持たない,ベブル内のすべてのカラムが含まれている必要があります。

  • ビュカラムは,派生カラムではなく,単純なカラム参照である必要があります。派生カラムは,単純なカラム参照ではなく,式から派生したカラムです。派生したカラムの例は次のとおりです。

    3.14159 col1 + 3 UPPER(col2) col3 / col4 (子查询

単純なカラム参照と派生カラムが混在しているビューは挿入できませんが,派生カラム以外のカラムだけを更新する場合は,更新可能になります。次のビュを考えてみてください。

CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;

このビュは,col2が式から派生しているので挿入できません。ただし,更新でcol2を更新しようとしていない場合は,更新可能になります。次の更新は許可されます。

SET col1 = 0;

次の更新は,派生カラムを更新しようとしているので,許可されません。

SET col2 = 0;

合并アルゴリズムで処理できるとすれば,複数テブルビュが更新できる可能性があります。これを実現するには,ビュ,で(外部結合または联盟ではなく)内部結合を使用する必要があります。また,ビュ,定義内の単一のテ,ブルだけを更新できるので,句は,ビュ内のいずれかのテブルのカラムだけを指名する必要があります。UNION ALLを使用するビュは,実装が一時テブルを使用して処理するので,理論的に更新可能でも許可されません。

更新可能な複数テブルビュでは,插入は,単一のテブルに挿入する場合に機能します。删除はサポトされません。

插入延迟は,ビュではサポトされません。

テブルにAUTO_INCREMENTカラムが含まれている場合,AUTO_INCREMENTカラムが含まれていないテブル上の挿入可能なビュに挿入すると,LAST_INSERT_ID ()の値を変更しません。これは,ビュの一部ではないカラムにデフォルト値を挿入した副作用が現れないようにするためです。

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

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

CREATE TABLE t1 (a INT);CREATE VIEW v1 AS SELECT * FROM t1 WHERE a < 2 -> WITH CHECK OPTION;CREATE VIEW v2 AS SELECT * FROM v1 WHERE > 0 -> WITH LOCAL CHECK OPTION;CREATE VIEW v3 AS SELECT * FROM v1 WHERE > 0 -> WITH CASCADED CHECK OPTION;

ここで,v2およびv3ビュは,v1という別のビュの観点で定義されています。v2には当地的チェックオプションがあるので,挿入は,v2チェックに対してのみテストされます。v3には级联チェックオプションがあるので,挿入はそれ自身のチェックに対してだけでなく,ベースとなるビューのチェックに対してもテストされます。次のステトメントでこれらの違いを示しています。

INSERT INTO v2 VALUES (2);查询OK, 1 row affected (0.00 sec) mysql> INSERT INTO v3 VALUES (2);错误1369 (HY000): CHECK OPTION failed 'test.v3'

MySQLは,创建视图時に,ビュの更新可能性フラグというフラグを設定します。更新および删除(および同様の操作)がビュで有効な場合,フラグは是的(正确)に設定されます。それ以外の場合,フラグは没有(错误)に設定されます。INFORMATION_SCHEMA。的观点テブルのIS_UPDATABLEカラムは,このフラグのステタスを表示します。これは,ビュが更新可能であるかどうかをサバが常に把握していることを意味します。ビュが更新可能ではない場合,更新删除插入などのステートメントは無効であり,拒否されます。(このセクションの別の箇所で説明しているように,ビューが更新可能である場合でも,ビューへの挿入はできない場合もあります)。

ビュを更新できるかどうかは,updatable_views_with_limitシステム変数の値に影響されます。セクション5.1.4 "サバシステム変数"を参照してください。


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