令和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;
- アPK_システム番号 DEFERRED
- イPK_システム番号 IMMEDIATE
- ウUK_担当者番号 DEFERRED
- エUK_担当者番号 IMMEDIATE
答えと解説を見る
✓ これが正解ウ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になれば、コミット時には重複がなくなり、すべての文が正常に終了します。途中で一時的に違反が起きる入替えでは、検査を遅らせると考えましょう。
ほかの選択肢はなぜ違うのか
- アPK_システム番号 DEFERRED:主キーの制約 PK_システム番号 は DEFERRABLE と定義されていないので、検査を遅らせることはできません。また、この入替えではシステム番号は変わらないので、問題になっているのは主キーではなく担当者番号の一意性です。
- イPK_システム番号 IMMEDIATE:主キーの制約を即時検査にしても、問題の担当者番号の一意性には影響しません。担当者番号の制約は各文の直後に検査されたままなので、最初の UPDATE で重複が生じた時点でエラーになります。
- エUK_担当者番号 IMMEDIATE:UK_担当者番号 は INITIALLY IMMEDIATE なので、IMMEDIATE を指定しても検査の時期は変わりません。最初の UPDATE で担当者番号222が重複した時点で制約違反となり、文は正常に終了しません。
この問題の用語
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:令和7年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問18:ブロックチェーンに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問16(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問15:隔離性水準に関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問14:べき等に関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)