GLOBAL AUTOINCREMENT デフォルトは、SQL Remote レプリケーション環境または Mobile Link 同期環境で複数のデータベースを使用するときのために用意されたものです。複数のデータベースにユニークなプライマリキーを保証します。
このオプションは AUTOINCREMENT と同じですが、ドメインはパーティションに分割されます。各分割には同じ数の値が含まれます。データベースの各コピーにユニークなグローバルデータベース ID 番号を割り当てます。SQL Anywhere では、データベースのデフォルト値は、そのデータベース番号でユニークに識別された分割からのみ設定されます。
この分割サイズには任意の正の整数を設定できますが、通常、分割サイズは、サイズの値がすべての分割で不足しないように選択されます。
カラムの型が BIGINT または UNSIGNED BIGINT である場合、デフォルトの分割サイズは 232 = 4294967296 です。それ以外の型のカラムの場合、デフォルトの分割サイズは 216 = 65536 です。特に、カラムの型が INT または BIGINT ではない場合は、これらのデフォルト値が適切ではないことがあるため、分割サイズを明示的に指定するのが最も賢明です。
このオプションを使用する場合、各データベース内のパブリックオプション global_database_id は、ユニークな正の整数に設定します。この値は、データベースをユニークに識別し、デフォルト値の割り当て元の分割を示します。使用できる値の範囲は np + 1 ~ (n+ 1) p です。ここで、n はパブリックオプション global_database_id の値を表し、p は分割サイズを表します。たとえば、分割サイズを 1000、global_database_id を 3 に設定すると、範囲は 3001 ~4000 になります。
前の値が (n + 1) p 未満であれば、このカラム内でこれまで使用した最大値より 1 大きい値が次のデフォルト値になります。カラムに値が含まれていない場合、最初のデフォルト値は np + 1 になります。デフォルトのカラム値は、現在の分割以外のカラムの値の影響を受けません。つまり、np + 1 より小さいか p(n + 1) より大きい数には影響されません。Mobile Link 同期を介して別のデータベースからレプリケートされた場合に、このような値が存在する可能性があります。
public オプション global_database_id は、負の値に設定できないため、選択された値は常に正になります。ID 番号の最大値を制限するのは、カラムのデータ型と分割サイズだけです。
public オプション global_database_id がデフォルト値の 2147483647 に設定されると、NULL 値がカラムに挿入されます。NULL 値が許可されていない場合に、ローの挿入を試みるとエラーが発生します。たとえば、テーブルのプライマリキーにカラムが含まれている場合に、この状況が発生します。
デフォルトの NULL 値は、分割で値が不足したときにも生成されます。この場合には、別の分割からデフォルト値を選択できるように、データベースに global_database_id の新しい値を割り当ててください。カラムで NULL が許可されていない場合に NULL 値を挿入しようとすると、エラーが発生します。未使用の値が残り少ないことを検出し、このような状態を処理するには、GlobalAutoincrement タイプのイベントを作成します。
GLOBAL AUTOINCREMENT カラムは、通常はプライマリキーカラム、つまりユニークな値を保持するように制約されたカラムになります。
これ以外の場合にも GLOBAL AUTOINCREMENT のデフォルトを適用できますが、データベースのパフォーマンスが低下することがあります。たとえば、各カラムの次の値が 64 ビットの符号付き整数として格納されている場合に、231 - 1 より大きい値または大きい double または numeric の値が使用されると、オーバーフローが発生して負の値になることがあります。
AUTOINCREMENT カラムへ直前に追加された値は、グローバル変数 @@identity を使って取得できます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |