ユーザーに自分のデータを表示するビューを作成していますが、ユーザーがそれらのビューのフィールドの一部を変更できるようにしたいと考えています。ビューで行った変更はベース テーブルにも反映されますか?
また、複数のベース テーブルで構成されるビューを更新することはできますか?
ユーザーに自分のデータを表示するビューを作成していますが、ユーザーがそれらのビューのフィールドの一部を変更できるようにしたいと考えています。ビューで行った変更はベース テーブルにも反映されますか?
また、複数のベース テーブルで構成されるビューを更新することはできますか?
Updatable and Insertable Views に記載されているとおり:
一部のビューは更新可能です。つまり
UPDATE
、 、DELETE
、またはなどのステートメントでそれらを使用してINSERT
、基になるテーブルの内容を更新できます。ビューを更新可能にするには、ビュー内の行と基になるテーブル内の行の間に 1 対 1 の関係がなければなりません。ビューを更新不可能にする他の特定の構造もあります。より具体的には、ビューに次のいずれかが含まれている場合、そのビューは更新できません。
DISTINCT
GROUP BY
HAVING
選択リストのサブクエリ
特定の結合 (このセクションで後述する追加の結合の説明を参照)
FROM
句の更新不可能なビュー
WHERE
句内のテーブルを参照する句FROM
内のサブクエリリテラル値のみを参照します (この場合、更新する基になるテーブルはありません)
用途
ALGORITHM = TEMPTABLE
(一時テーブルを使用すると、ビューは常に更新不可になります)ベース テーブルの任意の列への複数の参照。
[ deletia ]
MERGE
アルゴリズムで処理できると仮定すると、複数テーブル ビューを更新できる場合があります。これを機能させるには、ビューで (外部結合や ではなくUNION
) 内部結合を使用する必要があります。また、ビュー定義内の 1 つのテーブルのみを更新できるため、SET
句では、ビュー内のテーブルの 1 つの列のみを指定する必要があります。使用するビューはUNION ALL
、理論的には更新可能であっても許可されません。これは、実装が一時テーブルを使用してそれらを処理するためです。