4.1 注釈(NO)UPDATE、(NO)INSERT、(NO)DELETEによる更新操作の許可/禁止
キーワードUPDATEは、注釈付きデータを更新できることを意味します。キーワードINSERTおよびDELETEは、注釈で対応されたフィールド/列をそれぞれ挿入または削除できることを意味します。
二面性ビューのデータで、様々な更新操作(挿入、削除、更新)を許可できます。表および列の注釈を使用して、ビューの作成時に許可される操作を指定します。許可される操作は、次のように、ルート表と他の表またはその列の注釈に基づいています。
-
二面性ビューのデータは、ルート表にキーワード
INSERTまたはDELETEで注釈付けされている場合、挿入可能または更新可能です。 -
二面性ビューは、定義で使用されている表または列にキーワード
UPDATEの注釈が付けられている場合、更新可能です。
デフォルトでは、二面性ビューは読取り専用です。二面性ビューの定義に使用される表データはビューから変更できません。これは、デフォルトで、二面性ビュー自体のデータが挿入可能、削除可能、更新可能でないことを意味します。したがって、キーワードNOUPDATE、NOINSERTおよびNODELETEは、二面性ビューを定義するすべてのFROM句にデフォルトで関連しています。
特定のFROM句の表レベルの更新可能性を指定するには、キーワードWITHに続けて、(NO)UPDATE、(NO)INSERTおよび(NO)DELETEの1つ以上のキーワードを指定します。表レベルの更新性は、同じFROM句によって制御されるすべての列のうち、列レベル(NO)UPDATE注釈を上書きするものをを除く列を定義します。(列レベルが表レベルよりも優先されます。)
二面性ビューの列レベルの部分(JSONドキュメント・フィールドに対応)が更新可能であることを指定するには、フィールド列(キー値)の指定後に注釈WITHを使用し、その後にキーワードUPDATEまたはNOUPDATEを付けます。たとえば、'name' : r.name WITH UPDATEは、table rがNOUPDATEを指定して宣言されている場合でも、フィールドnameおよび列r.nameが更新可能であることを指定します。
ただし、識別列は、注釈に関係なく、常に読取り専用です。表レベルの注釈は識別列には影響せず、UPDATE注釈を識別列に適用するとエラーが発生します。
ノート:
NOCHECKとNOUPDATEの両方の注釈が付けられた列を更新しようとすると、エラーは発生せず、更新リクエストは単に無視されます。This is to prevent interfering with possible concurrency.
更新可能性の注釈は、例3-2および例3-3で次のように使用されます:
-
表
teamのフィールド/列(チーム・フィールド_idおよびname)は挿入、削除または更新できません(WITH NOINSERT NOUPDATE NODELETE)。したがって、同様に、表raceのフィールド/列(レース・フィールド_idおよびname)の場合は、raceInfoも挿入、削除または更新できません。 -
マッピング表
driver_race_mapのすべてのフィールド/列(フィールド_idおよびfinalPosition)は挿入および更新できますが、削除できません(WITH INSERT UPDATE NODELETE)。 -
表
driverのすべてのフィールド/列(ドライバ・フィールド_id、nameおよびpoints)は、挿入、更新および削除できます(WITH INSERT UPDATE DELETE)。
二面性ビューdriver_dvおよびteam_dvでは、表レベルの更新可能性の注釈のみがあります(列レベルの注釈はありません)。ただし、ビューrace_dvでは、フィールドlaps (表raceの列laps)に注釈WITH NOUPDATEがあり、表raceの列に対する表レベルの更新許可をオーバーライドします。特定のレースに定義されたラップ数は変更できません。
親トピック: 更新可能なJSONリレーショナル二面性ビュー