ホーム > データベーススペシャリスト試験 > 2024年
データベーススペシャリスト試験 2024年 午前2 問01
SQLのシーケンスに関する説明のうち, 適切なものはどれか。
ア:現在基底値が0→1→2→0→1→2→0→...のように, 周期的に繰り返すシーケンスを定義することはできない。
イ:シーケンスの現在基底値を, 最小値と最大値との間の任意の整数値に変更することはできない。
ウ:シーケンスの増分を, 負の整数値にすることはできない。
エ:トランザクション開始後のシーケンスの値の取得による現在基底値の変更は, トランザクションのロールバックでその変更を取り消すことができない。(正解)
解説
SQLのシーケンスに関する説明のうち, 適切なものはどれか。【午前2 解説】
要点まとめ
- 結論:シーケンスの値取得はトランザクションのロールバックで元に戻せないため、値の変更は永続的です。
- 根拠:シーケンスは独立したオブジェクトであり、値の生成はトランザクション管理の対象外となるためです。
- 差がつくポイント:シーケンスの動作とトランザクションの関係を正確に理解し、値の変更がロールバックで戻らないことを押さえることが重要です。
正解の理由
選択肢エは「トランザクション開始後のシーケンスの値の取得による現在基底値の変更は、トランザクションのロールバックでその変更を取り消すことができない」と述べています。
これは正しいです。シーケンスは独立したオブジェクトであり、値を生成するたびに内部カウンタが進みますが、この進みはトランザクションのコミットやロールバックに影響されません。つまり、シーケンスの値は一度取得すると、その値は永続的に消費されたとみなされ、ロールバックしても戻りません。
これは正しいです。シーケンスは独立したオブジェクトであり、値を生成するたびに内部カウンタが進みますが、この進みはトランザクションのコミットやロールバックに影響されません。つまり、シーケンスの値は一度取得すると、その値は永続的に消費されたとみなされ、ロールバックしても戻りません。
よくある誤解
シーケンスの値もトランザクション管理の対象で、ロールバックすれば値が戻ると誤解されがちです。実際はシーケンスの値は独立して管理されます。
解法ステップ
- シーケンスの基本動作を理解する(値は連続的に生成される)。
- トランザクションのロールバックがデータ変更を元に戻すことを確認する。
- シーケンスの値生成がトランザクション管理の対象外であることを知る。
- 選択肢の内容を比較し、シーケンスの値がロールバックで戻らない説明を選ぶ。
選択肢別の誤答解説
- ア: 周期的に値が繰り返すシーケンスは標準SQLでは定義できません。シーケンスは単調増加(または減少)であり、値が戻ることはありません。
- イ: シーケンスの現在値は最小値と最大値の範囲内で任意に変更可能です。制限はありません。
- ウ: シーケンスの増分は負の値に設定でき、これにより値を減少させるシーケンスも作成可能です。
- エ: トランザクションのロールバックでシーケンスの値変更は取り消せません。これが正解です。
補足コラム
シーケンスは主に連番生成に使われ、主キーの自動採番などに利用されます。シーケンスの値は一意性を保証するためにトランザクションの影響を受けず、値の重複や戻りを防止しています。これにより、並行処理時の一意性確保が容易になります。
FAQ
Q: シーケンスの値はトランザクションのコミット前に取得できますか?
A: はい、取得できますが、その値はロールバックしても戻りません。
A: はい、取得できますが、その値はロールバックしても戻りません。
Q: シーケンスの増分は必ず正の値ですか?
A: いいえ、負の値も設定可能で、値を減少させることもできます。
A: いいえ、負の値も設定可能で、値を減少させることもできます。
Q: シーケンスの値を任意の値にリセットできますか?
A: 多くのDBMSでは可能ですが、最小値と最大値の範囲内で行う必要があります。
A: 多くのDBMSでは可能ですが、最小値と最大値の範囲内で行う必要があります。
関連キーワード: SQLシーケンス, トランザクション, ロールバック, 自動採番, 増分値