データベーススペシャリスト試験 令和7年度 秋期 午前II 問8
表定義に基づいて作成された"システム担当者"表において、トランザクションAの複合文内のSQL文全てを正常終了させるためにaに入れる字句はどれか。ここで、実線の下線は主キーを表す。
〔表定義〕 CREATE TABLE システム担当者 ( システム番号 INTEGER, 担当者番号 INTEGER NOT NULL, CONSTRAINT PK_システム番号 PRIMARY KEY(システム番号), CONSTRAINT UK_担当者番号 UNIQUE(担当者番号) DEFERRABLE INITIALLY IMMEDIATE )
〔トランザクションAの複合文内のSQL文〕 SET CONSTRAINTS 「a」; UPDATE システム担当者 SET 担当者番号 = 222 WHERE システム番号 = 1234; UPDATE システム担当者 SET 担当者番号 = 111 WHERE システム番号 = 6789; COMMIT;

選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】ウ
初期状態では、システム番号1234の担当者番号が111、システム番号6789の担当者番号が222です。二つのUPDATE文は、これらの担当者番号を入れ替えようとしています。しかし、担当者番号には一意性制約UK_担当者番号があり、通常の即時検査では、最初のUPDATE直後に担当者番号222の行が一時的に2行となるため、その時点でエラーになります。そこで「SET CONSTRAINTS UK_担当者番号 DEFERRED」とし、一意性の検査をCOMMIT時まで延期します。最初の更新後は222が重複しますが、次の更新によって1234→222、6789→111となり、COMMIT時には重複が解消されています。したがってウが正解です。
アのPK_システム番号 DEFERREDは誤りです。更新対象は担当者番号であり、主キーであるシステム番号は変更されません。また、この主キー制約は遅延可能として定義されていません。
イのPK_システム番号 IMMEDIATEは誤りです。主キーを即時検査しても、担当者番号の一意性違反は回避できません。
エのUK_担当者番号 IMMEDIATEは誤りです。これは一意性制約を各SQL文の終了時に検査する指定なので、最初のUPDATEが重複によって失敗します。
【ポイント】 DEFERRABLEは制約検査を延期できること、INITIALLY IMMEDIATEはトランザクション開始時の既定が即時検査であることを表します。値の交換を複数文で行う場合は、途中状態ではなくトランザクション終了時に制約を満たせばよいDEFERREDが有効です。
出典:令和7年度 秋期 データベーススペシャリスト試験 午前II 問8
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の25問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる