令和7年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8
テクノロジ/データベース表定義に基づいて作成された“システム担当者”表において,トランザクション A の複合文内の SQL 文全てを正常終了させるために a に入れる字句はどれか。ここで,実線の下線は主キーを表す。 〔表定義〕 CREATE TABLE システム担当者 ( システム番号 INTEGER, 担当者番号 INTEGER NOT NULL, CONSTRAINT PK_システム番号 PRIMARY KEY(システム番号), CONSTRAINT UK_担当者番号 UNIQUE(担当者番号) DEFERRABLE INITIALLY IMMEDIATE ) システム担当者 システム番号|担当者番号 1234|111 6789|222 〔トランザクション A の複合文内の SQL 文〕 SET CONSTRAINTS [ a ]; UPDATE システム担当者 SET 担当者番号 = 222 WHERE システム番号 = 1234; UPDATE システム担当者 SET 担当者番号 = 111 WHERE システム番号 = 6789; COMMIT; (注:本サイトでは原問題の表を文字表記に変換しています)
出典:令和7年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8
- アPK_システム番号 DEFERRED
- イPK_システム番号 IMMEDIATE
- ウUK_担当者番号 DEFERRED
- エUK_担当者番号 IMMEDIATE
正解:ウ
解説
複合文内の二つのUPDATE文は,担当者番号の値をシステム番号1234と6789の間で入れ替えます。1文目の実行直後は,担当者番号222が一時的に2行に重複して存在する状態になるため,UK_担当者番号のUNIQUE制約をIMMEDIATE(既定値)のまま検査すると,この時点で違反となり処理が失敗します。これを避けるには,UK_担当者番号の制約検査をDEFERREDに設定し,COMMIT時にまとめて検査させる必要があります。
選択肢ごとの解説
- ア誤り。PK_システム番号はシステム番号の値の一意性を保証する制約であり,システム番号自体は変更されないため,この制約を操作しても複合文内で生じる担当者番号の一時的な重複違反は回避できません。
- イ誤り。PK_システム番号をIMMEDIATEに設定しても,システム番号は変更されないため,担当者番号の一時的な重複違反には対処できません。
- ウ正しい。UK_担当者番号をDEFERREDに設定することで,制約検査がCOMMIT時まで遅延され,UPDATE文の実行途中で生じる担当者番号の一時的な重複が許容され,複合文全体が正常終了します。
- エ誤り。UK_担当者番号をIMMEDIATE(既定値)のままにすると,1文目のUPDATE直後に担当者番号の重複が検査されて制約違反となり,複合文が異常終了してしまいます。