

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Colonne di identità
<a name="sequences-identity-columns-overview"></a>

**Importante**  
Quando si utilizzano le colonne di identità, il valore della cache deve essere considerato attentamente. Per ulteriori informazioni, consulta il callout importante nella [`CREATE SEQUENCE`](create-sequence-syntax-support.md) pagina.  
Per indicazioni su come utilizzare al meglio le colonne di identità in base ai modelli di carico di lavoro, consulta. [Utilizzo di sequenze e colonne di identità](sequences-identity-columns-working-with.md)

Una colonna di identità è una colonna speciale generata automaticamente da una sequenza implicita. Può essere usata per generare valori chiave. Per creare una colonna di identità, usa la `GENERATED ... AS IDENTITY` clausola in[`CREATE TABLE`](create-table-syntax-support.md), ad esempio:

```
CREATE TABLE people (
    id bigint GENERATED ALWAYS AS IDENTITY (CACHE 70000),
    ...
);
```

o in alternativa:

```
CREATE TABLE people (
    id bigint GENERATED BY DEFAULT AS IDENTITY (CACHE 70000),
    ...
);
```

Per ulteriori dettagli, consulta [`CREATE TABLE`](create-table-syntax-support.md).

Se un `INSERT` comando viene eseguito sulla tabella con la colonna identity e non viene specificato esplicitamente alcun valore per la colonna identity, viene inserito un valore generato dalla sequenza implicita. Ad esempio, con le definizioni precedenti e assumendo colonne aggiuntive appropriate, scrivi:

```
INSERT INTO people (name, address) VALUES ('A', 'foo');
INSERT INTO people (name, address) VALUES ('B', 'bar');
```

genererebbe valori per la `id` colonna a partire da 1 e produrrebbe i seguenti dati della tabella:

```
 id | name | address
----+------+---------
  1 | A    | foo
  2 | B    | bar
```

In alternativa, la parola chiave `DEFAULT` può essere specificata al posto di un valore per richiedere esplicitamente il valore generato dalla sequenza:

```
INSERT INTO people (id, name, address) VALUES (DEFAULT, 'C', 'baz');
```

Analogamente, la parola chiave `DEFAULT` può essere utilizzata nei comandi. `UPDATE`

Pertanto, in molti modi, una colonna di identità si comporta come una colonna con un valore predefinito.

Le clausole `ALWAYS` e `BY DEFAULT` la definizione della colonna determinano la modalità di gestione esplicita dei valori e dei comandi specificati dall'utente. `INSERT` `UPDATE` In un `INSERT` comando, se `ALWAYS` è selezionato, un valore specificato dall'utente viene accettato solo se l'istruzione lo specifica. `INSERT` `OVERRIDING SYSTEM VALUE` Se `BY DEFAULT` è selezionato, il valore specificato dall'utente ha la precedenza. Pertanto, l'utilizzo `BY DEFAULT` determina un comportamento più simile ai valori predefiniti, in cui il valore predefinito può essere sostituito da un valore esplicito, mentre `ALWAYS` fornisce una maggiore protezione contro l'inserimento accidentale di un valore esplicito.

Il tipo di dati di una colonna di identità deve essere uno dei tipi di dati supportati dalle sequenze. Consultare [`CREATE SEQUENCE`](create-sequence-syntax-support.md). Le proprietà della sequenza associata possono essere specificate durante la creazione di una colonna di identità (vedi[`CREATE TABLE`](create-table-syntax-support.md)) o modificate in seguito (vedi[`ALTER TABLE`](alter-table-syntax-support.md)).

Una colonna di identità viene contrassegnata automaticamente come`NOT NULL`. Una colonna di identità, tuttavia, non garantisce l'unicità. (Una sequenza normalmente restituisce valori univoci, ma una sequenza può essere reimpostata o i valori possono essere inseriti manualmente nella colonna dell'identità, come discusso in precedenza.) L'unicità dovrebbe essere applicata utilizzando un vincolo `PRIMARY KEY` or`UNIQUE`.