

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
<a name="sequences-identity-columns-overview"></a>

**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`](create-sequence-syntax-support.md) Seite.  
Hinweise zur optimalen Verwendung von Identitätsspalten auf der Grundlage von Workload-Mustern finden Sie unter[Arbeiten mit Sequenzen und Identitätsspalten](sequences-identity-columns-working-with.md).

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`](create-table-syntax-support.md) 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`](create-table-syntax-support.md).

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`](create-sequence-syntax-support.md)). Die Eigenschaften der zugehörigen Sequenz können beim Erstellen einer Identitätsspalte angegeben (siehe[`CREATE TABLE`](create-table-syntax-support.md)) oder danach geändert werden (siehe[`ALTER TABLE`](alter-table-syntax-support.md)).

Eine Identitätsspalte wird automatisch als markiert`NOT 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.