Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Identitätsspalten
Wichtig
Bei der Verwendung von Identitätsspalten sollte der Cache-Wert sorgfältig abgewogen werden. Weitere Informationen finden Sie in der Erläuterung „Wichtig“ auf der CREATE SEQUENCE Seite.
Hinweise zur optimalen Verwendung von Identitätsspalten auf der Grundlage von Workload-Mustern finden Sie unterArbeiten mit Sequenzen und Identitätsspalten.
Eine Identitätsspalte ist eine spezielle Spalte, die automatisch aus einer impliziten Sequenz generiert wird. Sie kann verwendet werden, um Schlüsselwerte zu generieren. Um eine Identitätsspalte zu erstellen, verwenden Sie die GENERATED ... AS IDENTITY Klausel CREATE TABLE beispielsweise in:
CREATE TABLE people ( id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000), ... );
oder alternativ:
CREATE TABLE people ( id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000), ... );
Weitere Details finden Sie unter CREATE TABLE.
Wenn ein INSERT Befehl für die Tabelle mit der Identitätsspalte ausgeführt wird und kein Wert explizit für die Identitätsspalte angegeben ist, wird ein durch die implizite Sequenz generierter Wert eingefügt. Zum Beispiel mit den obigen Definitionen und unter der Annahme zusätzlicher geeigneter Spalten, schreiben Sie:
INSERT INTO people (name, address) VALUES ('A', 'foo'); INSERT INTO people (name, address) VALUES ('B', 'bar');
würde Werte für die id Spalte ab 1 generieren und zu den folgenden Tabellendaten führen:
id | name | address ----+------+--------- 1 | A | foo 2 | B | bar
Alternativ DEFAULT kann das Schlüsselwort anstelle eines Werts angegeben werden, um den sequenzgenerierten Wert explizit anzufordern:
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
In ähnlicher Weise DEFAULT kann das Schlüsselwort in UPDATE Befehlen verwendet werden.
Somit verhält sich eine Identitätsspalte in vielerlei Hinsicht wie eine Spalte mit einem Standardwert.
Die Klauseln ALWAYS und BY DEFAULT die Spaltendefinition legen fest, wie explizit benutzerdefinierte Werte in INSERT Befehlen und behandelt werden. UPDATE Wenn in einem INSERT Befehl ausgewählt ALWAYS ist, wird ein benutzerdefinierter Wert nur akzeptiert, wenn in der INSERT Anweisung Folgendes angegeben ist. OVERRIDING SYSTEM VALUE Wenn ausgewählt BY DEFAULT ist, hat der benutzerdefinierte Wert Vorrang. Daher BY DEFAULT führt die Verwendung zu einem Verhalten, das Standardwerten ähnlicher ist, bei dem der Standardwert durch einen expliziten Wert außer Kraft gesetzt werden kann, während ALWAYS der Schutz vor dem versehentlichen Einfügen eines expliziten Werts etwas besser ist.
Der Datentyp einer Identitätsspalte muss einer der Datentypen sein, die von Sequenzen unterstützt werden. (Siehe CREATE SEQUENCE). Die Eigenschaften der zugehörigen Sequenz können beim Erstellen einer Identitätsspalte angegeben (sieheCREATE TABLE) oder danach geändert werden (sieheALTER TABLE).
Eine Identitätsspalte wird automatisch als markiertNOT NULL. Eine Identitätsspalte garantiert jedoch keine Eindeutigkeit. (Eine Sequenz gibt normalerweise eindeutige Werte zurück, aber eine Sequenz könnte zurückgesetzt werden, oder Werte könnten manuell in die Identitätsspalte eingefügt werden, wie zuvor beschrieben.) Die Eindeutigkeit müsste mit einer PRIMARY KEY UNIQUE OR-Einschränkung erzwungen werden.