Der Standardwert GLOBAL AUTOINCREMENT wird eingesetzt, wenn mehrere Datenbanken in einer SQL Remote-Replikation oder in einer MobiLink-Synchronisationsumgebung verwendet werden. Er gewährleistet, dass Primärschlüssel in mehreren Datenbanken eindeutig sind.
Diese Option ähnelt AUTOINCREMENT, außer dass die Domäne partitioniert ist. Jede Teilmenge enthält dieselbe Anzahl von Werten. Sie ordnen jeder Kopie der Datenbank eine eindeutige Datenbank-Identifizierungsnummer zu. SQL Anywhere liefert Standardwerte in einer Datenbank nur von der Partition, die eindeutig durch diese Datenbanknummer gekennzeichnet ist.
Die Partitionsgröße kann jede positive Ganzzahl sein, obwohl dieser Wert normalerweise so eingeteilt wird, dass seine Größe kaum jemals überschritten werden kann.
Wenn die Spalte vom Typ BIGINT oder UNSIGNED BIGINT ist, beträgt die Standard-Partitionsgröße 232 = 4294967296. Bei Spalten aller anderen Typen ist der Standardwert 216 = 65536. Da diese Standardwerte nicht immer sinnvoll sind, vor allem wenn die Spalte nicht vom Typ INT oder BIGINT ist, empfiehlt es sich, die Partitionsgröße explizit festzulegen.
Wenn Sie diese Option verwenden, muss der Wert der öffentlichen Option "global_database_id" in jeder Datenbank auf eine eindeutige, nicht negative Ganzzahl gesetzt werden. Dieser Wert kennzeichnet die Datenbank eindeutig und zeigt an, von welcher Partition Standardwerte zugeordnet werden sollen. Der Bereich der zulässigen Werte geht von np + 1 bis (n + 1) p, wobei n der Wert der öffentlichen Option "global_database_id" und p die Partitionsgröße ist. Wenn Sie z.B. die Partitionsgröße 1000 festlegen und global_database_id auf 3 gesetzt ist, liegt der Bereich zwischen 3001 und 4000.
Wenn der vorherige Wert kleiner als (n+ 1) p ist, wird der nächste Standardwert um eins größer sein als der vorherige größte Wert in der Spalte. Wenn die Spalte keine Werte enthält, ist der erste Standardwert np + 1. Standardspaltenwerte sind von Werten, die sich außerhalb der aktuellen Partition befinden, nicht betroffen; d.h. von Nummern kleiner als np+ 1 oder größer als p(n + 1). Solche Werte können vorhanden sein, wenn sie von einer anderen Datenbank über MobiLink-Synchronisation repliziert wurden.
Da die öffentliche Option global_database_id nicht auf einen negativen Wert gesetzt werden kann, sind die ausgewählten Werte immer positiv. Die maximale Identifizierungsnummer wird nur durch den Spaltendatentyp und die Partitionsgröße beschränkt.
Wenn die öffentliche Option global_database_id auf den Standardwert 2147483647 gesetzt ist, wird NULL in die Spalte eingefügt. Falls NULL nicht zulässig ist, wird beim Versuch, die Zeile einzufügen, ein Fehler erzeugt. Dies geschieht etwa, wenn die Spalte im Primärschlüssel der Tabelle enthalten ist.
NULL-Standardwerte werden auch generiert, wenn der Vorrat von Werten innerhalb der Partition aufgebraucht ist. In diesem Fall sollte der Datenbank ein neuer global_database_id-Wert zugewiesen werden, damit Standardwerte aus einer anderen Partition gewählt werden können. Der Versuch, NULL einzufügen, bewirkt einen Fehler, wenn die Spalte NULL nicht zulässt. Um festzustellen, ob der Vorrat von ungenutzten Werten zu Ende geht, und um diese Situation zu beheben, erstellen Sie ein Ereignis vom Typ GlobalAutoincrement. Weitere Hinweise finden Sie unter Definition von Ereignissen.
"Global Autoincrement"-Spalten sind typischerweise Primärschlüsselspalten oder Spalten, die auf eindeutige Werte beschränkt sind (siehe Entitätsintegrität erzwingen).
Es ist zwar möglich, auch in anderen Fällen einen "Global Autoincrement"-Standardwert zu verwenden, jedoch kann sich dies negativ auf die Performance auswirken. In Fällen, in denen der nächste Wert für jede Spalte als Ganzzahl mit Vorzeichen (64 Byte) gespeichert wird, kann die Verwendung großer "double"- oder "numeric"-Werte oder die Verwendung von Werten größer als 231 -1 zur Umwandlung in negative Werte führen.
Sie können den zuletzt in eine Autoincrement-Spalte eingegebenen Wert mit der globalen Variable @@identity abrufen. Weitere Hinweise finden Sie unter Globale Variable @@identity.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |