Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Datenbanken erstellen » Transaktionen und Isolationsstufen verwenden

 

Primärschlüssel-Generierung und Parallelität

Sie werden auf Situationen stoßen, wo die Datenbank automatisch eine eindeutige Zahl generieren sollte. Wenn Sie zum Beispiel eine Tabelle erstellen, in der alle Verkaufsrechnungen gespeichert werden, ziehen Sie es wahrscheinlich vor, dass die Datenbank automatisch eindeutige Rechnungsnummern vergibt, und nicht das Verkaufspersonal diese aussucht.

Beispiel

Man kann zum Beispiel Rechnungsnummern erhalten, indem zur vorherigen Nummer jeweils 1 addiert wird. Diese Methode funktioniert aber nicht, wenn mehr als eine Person Rechnungen in die Datenbank eingibt. Zwei Mitarbeiter könnten die gleiche Rechnungsnummer verwenden.

Das Problem kann auf mehr als eine Art gelöst werden:

  • Ordnen Sie jeder Person, die neue Rechnungen eingibt, einen Bereich an Rechnungsnummern zu.

    Sie können dieses Schema umsetzen, indem Sie eine Tabelle mit den Spalten Benutzername und Rechnungsnummer erstellen. Die Tabelle hätte für jeden Benutzer, der Rechnungen eingibt, eine Zeile. Jedesmal, wenn der Benutzer eine Rechnung eingibt, wird die Zahl in der Tabelle erhöht und für die neue Rechnung verwendet. Damit alle Tabellen in der Datenbank bearbeitet werden können, sollte eine Tabelle aus drei Spalten bestehen: Tabellenname, Benutzername und letzter Schlüsselwert. Sie sollten regelmäßig überprüfen, dass jede Person genug Nummern hat.

  • Erstellen Sie eine Tabelle mit den Spalten "table name" und "last key value".

    Eine Zeile in dieser Tabelle würde die letzte verwendete Rechnungsnummer enthalten. Jedesmal, wenn jemand eine Rechnung hinzufügt, wird eine neue Verbindung erstellt, die Nummer in der Tabelle erhöht und die Änderung sofort festgeschrieben. Die aufgezählte Nummer kann für die neue Rechnung verwendet werden. Andere Benutzer können sich Rechnungsnummern holen, da Sie die Zeile mit einer eigenen Transaktion, die nur einen Augenblick dauerte, aktualisiert haben.

  • Verwenden Sie eine Spalte mit einem Standardwert von NEWID in Verbindung mit dem binären UNIQUEIDENTIFIER-Datentyp, um einen universell eindeutigen Bezeichner (universally unique identifier = UUID) zu generieren.

    UUID- und GUID-Werte können dazu verwendet werden, eindeutige Zeilen in einer Tabelle zu identifizieren. Die Werte werden auf eine Weise generiert, dass ein auf einem bestimmten Computer produzierter Wert nicht dem Wert eines anderen Computers entspricht. Sie können deshalb als Schlüssel in Replikations- und Synchronisationsumgebungen verwendet werden.

    Weitere Hinweise zum Generieren von eindeutigen Bezeichnern finden Sie unter Der Standardwert NEWID.

  • Verwenden Sie eine Spalte mit einem AUTOINCREMENT-Standardwert. Zum Beispiel:

    CREATE TABLE Orders (
       OrderID INTEGER NOT NULL DEFAULT AUTOINCREMENT,
       OrderDate DATE,
       primary key( OrderID )
    );

    Ist beim Einfügen in die Tabelle ein Wert nicht für die selbsterhöhende Spalte vorgegeben, so wird ein eindeutiger Wert generiert. Ist ein Wert vorgegeben, wird er auch verwendet. Ist der Wert größer als der derzeitige Höchstwert für die Spalte, so wird dieser Wert als Startpunkt für nachfolgende Einfügungen verwendet. Der Wert der letzten eingefügten Zeile in einer selbsterhöhenden Spalte steht als globale Variable "@@identity" zur Verfügung.