次のコードでアーティスト ID を設定します:
リーリー私の ArtistId が時々値をスキップして順序が狂う理由を誰かが説明してもらえますか?無効なデータをテーブルに挿入しようとしても (例外がスローされた場合)、データはテーブル エントリによって拒否されますが、artistId は目に見えずに入力されることに気付きました。これにより、テーブルは次の状態になります:
アーティストID | ###名前### ###姓###||
---|---|---|
マザーズ | 3 | |
シャクール | 前述したように、既に存在するアーティストを挿入しようとしているため、ArtistId 値 2 はスキップされますが、一意である必要があるように設定しました。したがって、例外がスローされ、データは拒否されますが、値 2 の ID は何らかの形で埋められます (またはスキップされます)。この状況を回避するには、どうすればこの問題を解決できるでしょうか。助けていただけますか? |
Oracle データベースを使用しているようですね。 ID は挿入前に生成されるため、挿入に失敗すると ID が失われます。さらに、サーバー クラスターを使用する場合、ID 範囲が各サーバーに割り当てられ、連続した挿入間で大幅に異なる可能性があります。 簡単に言うと、ID が連続していて、値が欠落していないことは信頼できないということです。これは他のデータベースでも機能する可能性が高くなります。
これはほぼ通常の動作です。
シーケンス ジェネレーターの唯一の役割は、さまざまな整数値を生成することだけであり、それ以上のことはありません。