5

ユーザーに自分のデータを表示するビューを作成していますが、ユーザーがそれらのビューのフィールドの一部を変更できるようにしたいと考えています。ビューで行った変更はベース テーブルにも反映されますか?

また、複数のベース テーブルで構成されるビューを更新することはできますか?

4

1 に答える 1

11

Updatable and Insertable Views に記載されているとおり:

一部のビューは更新可能です。つまりUPDATE、 、DELETE、またはなどのステートメントでそれらを使用してINSERT、基になるテーブルの内容を更新できます。ビューを更新可能にするには、ビュー内の行と基になるテーブル内の行の間に 1 対 1 の関係がなければなりません。ビューを更新不可能にする他の特定の構造もあります。より具体的には、ビューに次のいずれかが含まれている場合、そのビューは更新できません。

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

  • DISTINCT

  • GROUP BY

  • HAVING

  • UNIONまたUNION ALL

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

  • 特定の結合 (このセクションで後述する追加の結合の説明を参照)

  • FROM句の更新不可能なビュー

  • WHERE句内のテーブルを参照する句FROM内のサブクエリ

  • リテラル値のみを参照します (この場合、更新する基になるテーブルはありません)

  • 用途ALGORITHM = TEMPTABLE(一時テーブルを使用すると、ビューは常に更新不可になります)

  • ベース テーブルの任意の列への複数の参照。

[ deletia ]

MERGEアルゴリズムで処理できると仮定すると、複数テーブル ビューを更新できる場合があります。これを機能させるには、ビューで (外部結合や ではなくUNION) 内部結合を使用する必要があります。また、ビュー定義内の 1 つのテーブルのみを更新できるため、SET句では、ビュー内のテーブルの 1 つの列のみを指定する必要があります。使用するビューはUNION ALL、理論的には更新可能であっても許可されません。これは、実装が一時テーブルを使用してそれらを処理するためです。

于 2012-12-10T02:06:28.117 に答える