Generator/Sequence

<< Firebird 3.0 DDL Trigger | IBExpert | Exception >>

Die deutschsprachige Dokumentation wird seit dem 26. Juli 2016 nicht mehr gepflegt. Aktuelle und vollständige Dokumentation finden Sie auf der englischsprachigen Webseite: IBExpert Documentation


Generator (Firebird 2: Sequence)

Generatoren sind automatische, sequentielle, die gesamte Datenbank umfassende Zähler. Sie sind notwendig, weil alle Operationen in Firebird/InterBase® der Transaktionskontrolle unterliegen.

Ein Generator ist ein Datenbankobjekt und ist Teil der Metadaten der Datenbank. Es ist eine sequentielle Nummer, die einen 64-Bit-Ganzzahlwert umfasst BIGINT (SQL Dialekt 3) seit InterBase® 6/Firebird (in SQL Dialekt 1 ist es ein 32-Bit-Wert INTEGER), der automatisch in eine Spalte eingegeben werden kann. Er wird oft verwendet, um einmalige, eindeutige Werte in einem internen Primärschlüssel zu gewährleisten.

Eine Datenbank kann eine beliebige Anzahl von Generatoren enthalten und diese können in jeder Transaktion verwendet und aktualisiert werden. Generatoren sind der einzige transaktionsabhängige Teil in Firebird/InterBase®. Für jede Operation wird eine neue Nummer generiert, unabhängig davon, ob diese Transaktion letztendlich committed wird oder zurückgenommen wird (Roll Back), was im Nachhinein zu "fehlenden Nummern" führt. Daher eignen sich Generatoren bestens zur automatischen, internen, sequentiellen Nummerierung von internen Primärschlüsseln.

SEQUENCE wurde in Firebird 2.0 eingeführt. Es ist ein SQL-99-konformes Synonym für GENERATOR. SEQUENCE ist ein in der SQL-Definition beschriebener Syntax-Term, wohingegen GENERATOR ein Vermächtnis aus der InterBase®-Syntax ist.

Es wird den Benutzern von Firebird 2.0 empfohlen die SEQUENCE Standard-Syntax zu verwenden:

Ein Sequence-Generator ist ein Mechanismus zum Generieren sukzessiver, exakt-numerischer Werte und zwar einer nach dem anderen. Ein Sequence-Generator ist ein benanntes Tabellenobjekt. In Dialekt 3 ist es ein BIGINT, in Dialekt 1 ist es ein INTEGER. Es wird oft verwendet, um garantiert einmalige IDs für Datensätze zu implementieren, um Spalten zu konstruieren, die sich wie AUTOINC-Felder, die man in anderen RDBMSs findet, verhalten. Weitere Information zu SEQUENCE finden Sie in den Firebird 2.0.4 Release Notes.

Aus Gründen der Kontinuität wird IBExpert weiterhin den Begriff GENERATOR zusammen mit SEQUENCE verwenden.

Generatoren können entweder direkt im SQL Editor oder im DB Explorer erzeugt werden (Detaisl finden Sie unter Neuer Generator).

Im Allgemeinen wird ein Generator zur eindeutigen Identifizierung von Nummern für Primärschlüssel verwendet. Ein BEFORE INSERT TRIGGER kann dazu definiert werden, der den aktuellen Wert mit der Funktion GEN_ID() erhöht und diese automtaisch in das entsprechende Tabellenfeld einfügt. Mehr Informationen finen Sie unter Erzeuge Trigger für einen Generator. Ein Generator kann auch von einer Stored Procedure oder einer Anwendung aufgerufen werden.

Eine Datenbank kann eine beliebige Anzahl an Generatoren enthalten. Obwohl seit der letzten InterBase® Version 7.x die Anzahl der Generatoren begrenzt wurde auf eine Datenseite. Ein Generator verwendet 8 Bytes, was bedeutet, dass ca. 115 Generatoren auf eine Seite passen (1K). Diese Begrenzung wurde in der InterBase® 7.x Version und in der Firebird 1.0 Version gelöst. In Firebird können Sie mehr als 32.000 Generatoren pro Datenbank erzeugen.

Der aktuelle Generatorenwert eines vorhandenen Generators wird nicht in einer Tabelle, sondern auf seinen eigenen Systemdatenseiten gespeichert, da der Tabelleninhalt den transaktionalen Änderungen unterliegt. Der Generatorenwert wird auch beim Backup gesichert.

Generatoren sind Datenbankobjekte und Teil der Metadaten der Datenbank und können, wie alle anderen Firebird/InterBase® Objekte, im IBExpert DB Explorer erzeugt, geändert und gelöscht werden.

zurück zum Seitenanfang

Neuer Generator

Ein neuer Generator kann in einer verbundenen Datenbank auf viele Arten erzeugt werden:

  1. Unter Verwendung des Menüpunkts Datenbank / Neuer Generator, dem entsprechenden Symbol in der Symbolleiste Neues Datenbankobjekt, oder mit dem Rechtsklickmenü des DB Explorers (oder Tastenkombination [Strg + N]), wenn der Generatorenkopf der entsprechenden Datenbank markiert ist. Der Editor Neuer Generator wird gestartet:
  1. Alternativ kann ein neuer Generator im DB Explorer auf der Feld-Seite per Doppelklick (oder mit der Leertaste beim Eingeben eines neuen Feldes), um die AutoInc-Box zu aktivieren:
  1. Oder im Feldeditor unter AutoInc (per Doppelklick auf einem vorhandenen INTEGER oder SMALLINT Feld im Tabelleneditor).
  2. Oder direkt im IBExpert SQL Editor und dann als Generator abgespeichert.

Unter Verwendung des muss der neue Generatorenname einfach zusammen mit dem anfänglichen Generatorenwert definiert werden. Im Generatoreneditor können mehrere Generatoren gleichzeitig erzeugt und kompiliert werden:

Bei Betätigung des Schaltknopfes Zeige alle Generatoren in der Symbolleiste des Generatoreneditors, werden alle Generatoren der Datenbank aufgelistet und ein vorhandener Generator ausgewählt. (Derselbe Generator kann zu internen Nummerierungszwecken in mehreren Feldern verwendet werden, beispielsweise für alle internen Primärschlüssel-IDs innerhalb einer Datenbank.)

Auf der Seite AutoInc im Tabellen- und Feldeditor muss lediglich die Checkbox Erzeuge Generator aktiviert werden und der Name, sowie der Anfangswert definiert werden.

Es ist auch möglich, hier einen vorhandenen Generator für das spezifizierte Feld zu wählen (klicken Sie einfach auf Benutze vorhandenen Generator und wählen Sie aus der Drop-Down-Liste):

Die SQL-Syntax lautet, wie folgt:

 CREATE GENERATOR <Generator_Name>;

Um einen Beschreibungstext beim Erzeugen eines Generators einzubinden, fügen Sie folgendes hinzu:

 COMMENT ON SEQUENCE <Generator_Name> IS 'Description'

Diese Anweisung setzt den Anfangswert des Generators auf Null. Um einen anderen Anfangswert zu etablieren, verwenden Sie die Anweisung SET GENERATOR, zum Beispiel:

 SET GENERATOR <Generator_Name> TO n;

wobei n der Anfangswert des Generators ist. SET GENERATOR kann auch zum Zurücksetzen eines vorhandenen Generatorenwertes verwendet werden. Dies sollte allerdings mit Vorsicht geschehen, da normalerweise die Spalte(n), die den Generatorenwert erhält/erhalten als eindeutig definiert werden muss/müssen. Beispielsweise würden Sie normalerweise nicht wollen, dass eine Kunden-ID zurückgesetzt wird, es sei denn dies geschieht kontrolliert und aus bestimmten Gründen.

Verwenden Sie den STEP_VALUE Parameter, um den Generator zu inkrementieren (dieser kann positiv oder negativ sein):

 GEN_ID(<Generator_Name>, STEP_VALUE) 

Wenn dieser Parameter nicht verwendet wird, greift die Standardeinstellung STEP_VALUE mit einer Inkrementierung um 1.

zurück zum Seitenanfang

Generatoreneditor

Der Generatoreneditor kann über den Menüpunkt Datenbank / Neuer Generator gestartet werden; aus dem DB Explorer, mit dem Rechtsklickmenü oder per Doppelklick auf einen vorhandenen Generator; oder direkt aus dem Feld- oder Tabelleneditor / Autozähler.

Wenn Sie das erste Mal einen Generator erzeugen finden Sie weitere Details unter Neuer Generator.

Der Generatoreneditor hat seine eigene Symbolleiste (siehe Symbolleiste Generatoreneditor) und bietet folgende Optionen an:

Generatorenseite

Hier können Sie einen neuen Generator erzeugen, einen vorhandenen Generator auswählen und einen Generator ändern. Details finden Sie unter Neuer Generator oder Bearbeite Generator.

In Firebird 2.0 wurde das Feld RDB$DESCRIPTION zu RDB$GENERATORS hinzugefügt, sodass es jetzt möglich ist, einen Besvhreibungstext beim Erzeugen des Generators mit einzugeben.

In IBExpert Version 2014.09.15 wurde Unterstützung für den neuen Firebird 3.0 Generatoren-Inkrementwert (INCREMENT BY) eingeführt.

Abhängigkeiten

Weiteres finden Sie unter Tabelleneditor / Abhängigkeiten.

DDL

Weiteres finden Sie unter Tabelleneditor / DDL.

Skripte

Erzeuge - zeigt die CREATE GENERATOR-Anweisung für den gewählten Generator auf der Generatorenseite. Wenn alle Generatoren auf der Seite Generatoren angezeigt werden (Schaltknopf Zeige alle Generatoren), erscheinen alle dazugehörigen CREATE-Anweisungen auf dieser Seite.

Setze Werte - zeigt die SET GENERATOR-Anweisung für den Generator, der auf der Seite Generatoren ausgewählt wurde. Auch hier gilt, wenn alle Generatoren auf der Seite Generatoren angezeigt werden (Schaltknopf Generatoren), erscheinen alle SET-Anweisungen auf dieser Seite.

Voll - zeigt den vollständigen SQL-Text für die ausgewählten Generatoren auf der Seite Generatoren (oder alle Generatoren).

Bitte beachten Sie, dass die Seite Skripte nur der Anzeige dient. Es ist nicht möglich Änderungen auf dieser Seite vorzunehmen.

Vergleich

Weiters finden Sie unter Tabelleneditor / Vergleich.

To-Do

Weiteres finden Sie unter Tabelleneditor / To-Do.

zurück zum Seitenanfang

Bearbeite Generator

Ein Generator kann geändert werden, um einen neuen Wert festzulegen. Der Wert eines Generators kann beliebig oft geändert werden.

Dies kann in IBExpert im Generatoreneditor des DB Explorers gemacht werden, der entweder per Doppelklick auf den Generatorennamen geöffnet werden kann, oder per Rechstklick und Auswahl des Menüpunkts Bearbeite Generator [Strg + 0]. Geben Sie einfach den neuen Wert in die Spalte Wert ein, kompilieren Sie und schließen Sie mit Commit ab.

Die SQL-Syntax zur Änderung einer Sequence lautet wie folgt:

 SET SEQUENCE <sequence_name> RESTART WITH n

Die SQL-Syntax zur Änderung eines Generators lautet wie folgt:

 SET GENERATOR <generator_name> TO n

wobei n der neue Wert ist. Dieser neue Wert ist sofort wirksam.

Weitere Information finden Sie unter ALTER SEQUENCE und SET GENERATOR.

zurück zum Seitenanfang

Lösche Generator

In IBExpert kann ein Generator aus dem DB Explorer durch Auswahl des zu löschenden Generators und dem Symbol '-' in der Symbolleiste Generatoreneitor oder [Umschaltg + Entf] gelöscht werden.

IBExpert bittet um Bestätigung und zeigt die SQL-Anweisung an:

bevor die Löschung endgültig ist, wenn die Anweisung comitted wird.

DIe SQL-Syntax lautet:

 DROP GENERATOR <generator_name>;

Bitte beachten Sie: Der DROP GENERATOR-Befehl wurde in Firebird 1 eingeführt und existiert nicht in älteren InterBase® Versionen. Wenn Sie einen Generator in einer älteren InterBase® Version löschen wollen, müssen Sie ihn aus der Systemtabelle RDB$GENERATORS entfernen:

 DELETE FROM RDB$GENERATORS
   WHERE RDB$GENERATOR_NAME='GEN01';

Beachten Sie, dass dieser Befehl den gewählten Generator löscht, egal welche Abhängigkeiten bestehen.

Siehe auch:
deutschsprachig:
Erzeuge einen Trigger für einen Generator
Firebird Generatoren-Ratgeber
Firebird für Datenbankexperten: Episode 2 - Seitentypen
englischsprachig:
CREATE SEQUENCE
ALTER SEQUENCE
DROP SEQUENCE
FB 2.0.4. Release Notes: CREATE SEQUENCE
SET GENERATOR
CREATE GENERATOR
DROP GENERATOR
Firebird Generator Guide

zurück zum Seitenanfang
<< Firebird 3.0 DDL Trigger | IBExpert | Exception >>