令和7年度 秋期 データベーススペシャリスト試験 午前II 問8

テクノロジデータベース

この問題は2025(R7)秋 データベーススペシャリスト 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。

本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。

表定義に基づいて作成された“システム担当者”表において,トランザクションAの複合文内のSQL文全てを正常終了させるために a に入れる字句はどれか。ここで,実線の下線は主キーを表す。

〔表定義〕のSQL文
図の説明テキスト

〔表定義〕

CREATE TABLE システム担当者 (
    システム番号 INTEGER,
    担当者番号 INTEGER NOT NULL,
    CONSTRAINT PK_システム番号 PRIMARY KEY(システム番号),
    CONSTRAINT UK_担当者番号 UNIQUE(担当者番号)
        DEFERRABLE INITIALLY IMMEDIATE
)
システム担当者の表
図の説明テキスト

システム担当者

システム番号 担当者番号
1234 111
6789 222

※「システム番号」に実線の下線(主キー)が引かれている。

〔トランザクションAの複合文内の SQL 文〕
図の説明テキスト

〔トランザクションAの複合文内の SQL 文〕

SET CONSTRAINTS <span id="q8_blank_a" class="blank-label">a</span> ;
UPDATE システム担当者 SET 担当者番号 = 222 WHERE システム番号 = 1234;
UPDATE システム担当者 SET 担当者番号 = 111 WHERE システム番号 = 6789;
COMMIT;

解答・解説を読む

正解: 選択肢

正解は です。

トランザクション処理において、一時的に制約違反が発生するような更新(例えば、2つの行の値を入れ替えるスワップ処理など)を行う場合、行を1つずつ更新した直後のタイミングでは一意性制約などに違反してしまうことがあります。
このようなエラーを回避し、複合文内のSQL文を全て正常終了させるためには、制約のチェックタイミングをトランザクションの終了時(コミット時)まで遅らせる必要があります。

SQLでは SET CONSTRAINTS 制約名 DEFERRED と指定することで、対象となる制約の評価を遅延させることができます。
本問の場合、一時的に違反の恐れがあるのは担当者番号の制約(UK_担当者番号)であり、そのチェックを遅延(DEFERRED)させる必要があるため、UK_担当者番号 DEFERRED が適切です。

各選択肢の解説

  • ア (PK_システム番号 DEFERRED): 遅延させるべき制約が主キー制約(PK_システム番号)ではないため誤りです。
  • イ (PK_システム番号 IMMEDIATE): IMMEDIATE は文の実行直後に制約チェックを行う(即時評価)ため、一時的な制約違反でエラーとなり正常終了しません。
  • ウ (UK_担当者番号 DEFERRED): 正解です。担当者番号の制約チェックをトランザクション終了時まで遅延させることで、処理を正常終了させることができます。
  • エ (UK_担当者番号 IMMEDIATE): IMMEDIATE を指定すると、文の実行直後に制約がチェックされ、一時的な違反によりエラーが発生してしまうため誤りです。