1

ここでは、Oracle データベースの auto_increment の実装としてDennis のソリューションを使用しようとしています。次のように 1 つのシーケンスを作成するとします。

CREATE SEQUENCE auto_increment
  START WITH 1
  INCREMENT BY 1;

複数のテーブルで auto_increment の動作が必要な場合、すべてのテーブルでこのシーケンスを使用できますか? または、テーブルごとに別のシーケンスが必要ですか? つまり、あるテーブルのシーケンスの増分は、そのシーケンスを使用する別のテーブルの影響を受けますか?

4

3 に答える 3

3

はい、同じシーケンスを使用すると、シーケンス アクセスが相互に影響します。しかし、あなたの質問のトーンは、シーケンスが連続していることを期待していると思います。

だまされてはいけません。シーケンスはシーケンシャルではありません。保証できる唯一のことは、取得された番号が一意であり、昇順であることです(あなたの場合)

于 2012-07-30T18:40:57.823 に答える
1

多くのテーブルに同じシーケンスを使用できます。これを行うのは型にはまらず、シーケンスの競合が増え、たとえば環境間のエクスポートとインポートの結果としてシーケンス値をリセットする必要がある場合は、作業が少し難しくなりますが、動作します。

もちろん、シーケンスがテーブル A に値 1 を与えた場合、テーブル B で定義されたトリガーに同じ値を与えることはありません。シーケンスはギャップのない値のセットを生成しないため (つまり、"作成するシーケンスの数に関係なく、すべてのテーブルに "行方不明" の値)、これは大きな欠点にはなりません。

于 2012-07-30T18:41:21.900 に答える
1

シーケンスはシーケンシャルです。ただし、ロールバック、コミット (シーケンス ジェネレーターがコミットまたはロールバックに関係なくシーケンスを発行するため)、および複数のテーブルの同じシーケンスなど、シーケンスにギャップを引き起こす可能性のある多くのことがあります。

于 2012-10-23T15:38:01.163 に答える