IPA公式正解:ウ UK_担当者番号 DEFERRED
※ 正解はIPA公表の解答です。解説は当サイトが生成AIを用いて作成しています。誤りにお気づきの場合はお問い合わせください。
【解説】正解は選択肢【ウ】です。トランザクションAでは担当者番号の値を交換(スワップ)しており、1文目のUPDATE実行時にUNIQUE制約違反が発生します。この検査をCOMMIT時まで遅延させるため、DEFERRABLE指定された一意性制約「UK_担当者番号」をDEFERREDに設定します。
【詳細解説】■ 本問の核心・解法のポイント
表定義では「担当者番号」に対して `CONSTRAINT UK_担当者番号 UNIQUE(担当者番号) DEFERRABLE INITIALLY IMMEDIATE` が設定されています。
初期状態では `INITIALLY IMMEDIATE`(文実行の都度制約を検証)となっています。
トランザクションAの処理内容:
1. システム番号 1234 の担当者番号を 111 から 222 に変更する。
→ この時点で、システム番号 6789 の担当者番号(222)と重複するため、即時検査では一意性制約(UK_担当者番号)違反のエラーが発生します。
2. システム番号 6789 の担当者番号を 222 から 111 に変更する。
→ ここまで完了すれば、2つの行の間で値が入れ替わっただけなので、コミット時には制約違反は解消されています。
このトランザクションを正常終了させるには、制約検査のタイミングを文単位ではなくトランザクション終了時(COMMIT時)まで遅延(DEFERRED)させる必要があります。対象の制約は一意性制約である「UK_担当者番号」です。
構文:`SET CONSTRAINTS UK_担当者番号 DEFERRED;`
・各選択肢の徹底解説:
・ア:更新しているのは「担当者番号」であり、主キー(PK_システム番号)の重複は発生していません。また、表定義上でPKはDEFERRABLE宣言されていません。
・イ:IMMEDIATEにすると文実行時に制約検査が行われるため、1文目のUPDATEでエラーになります。
・ウ:【選択肢ウ★】UK_担当者番号の検査をコミット時まで遅延(DEFERRED)させることで、一連の更新が正常終了します。
・エ:IMMEDIATEでは即時検査されるため、1文目のUPDATEで重複エラーが発生します。
よって正解はウです。