過去問解きまくり研究所 ホーム

令和7年度 秋期 午前Ⅱ 問8

データ操作

一意性制約に関する問題

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

〔表定義〕

CREATE TABLE システム担当者 (
    システム番号 INTEGER,
    担当者番号 INTEGER NOT NULL,
    CONSTRAINT PK_システム番号 PRIMARY KEY(システム番号),
    CONSTRAINT UK_担当者番号 UNIQUE(担当者番号)
        DEFERRABLE INITIALLY IMMEDIATE
)

システム担当者

システム番号担当者番号
1234111
6789222

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

SET CONSTRAINTS [ a ];
UPDATE システム担当者 SET 担当者番号 = 222 WHERE システム番号 = 1234;
UPDATE システム担当者 SET 担当者番号 = 111 WHERE システム番号 = 6789;
COMMIT;
答えと解説を見る

✓ これが正解ウUK_担当者番号 DEFERRED

解説

UK_担当者番号 DEFERRED で一意性の検査をコミット時に遅らせます。

トランザクションAは、システム番号1234と6789の担当者番号111と222を入れ替えようとしています。最初の UPDATE で1234の担当者番号を222にした時点では、6789もまだ222なので、担当者番号の UNIQUE 制約に一時的に違反します。制約 UK_担当者番号 は DEFERRABLE INITIALLY IMMEDIATE と定義されているので、通常は各 SQL 文の直後に検査されてエラーになりますが、検査を遅らせることは許されています。そこで SET CONSTRAINTS UK_担当者番号 DEFERRED とすれば、検査はコミットのときまで延期されます。二つ目の UPDATE で6789が111になれば、コミット時には重複がなくなり、すべての文が正常に終了します。途中で一時的に違反が起きる入替えでは、検査を遅らせると考えましょう。

ほかの選択肢はなぜ違うのか

この問題の用語

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

同じ用語が出る問題

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)