Riepilogo: in questo tutorial, imparerai come utilizzare Oracle identity column per definire facilmente una colonna numerica generata automaticamente per una tabella.
Introduzione alla colonna di identità Oracle
Oracle 12c ha introdotto un nuovo modo che consente di definire una colonna di identità per una tabella, che è simile alla colonnaAUTO_INCREMENT
in MySQL oIDENTITY
in SQL Server.
La colonna identity è molto utile per la colonna chiave primaria surrogata., Quando si inserisce una nuova riga nella colonna identity, Oracle genera automaticamente e inserisce un valore sequenziale nella colonna.
Per definire una colonna identity, si utilizza la clausola identity come mostrato di seguito:
Innanzitutto, la parola chiave GENERATED
è obbligatoria.
In secondo luogo, è possibile specificare un’opzione per generare valori di identità:
GENERATED ALWAYS
: Oracle genera sempre un valore per la colonna identity. Il tentativo di inserire un valore nella colonna identity causerà un errore.,GENERATED BY DEFAULT
: Oracle genera un valore per la colonna identity se non si fornisce alcun valore. Se si fornisce un valore, Oracle inserirà tale valore nella colonna identità. Per questa opzione, Oracle emetterà un errore se si inserisce un valore NULL nella colonna identità.-
GENERATED BY DEFAULT ON NULL
: Oracle genera un valore per la colonna identity se si fornisce un valore NULL o nessun valore.
In terzo luogo, è possibile avere un numero di opzioni per la colonna identità.,
START WITH initial_value
controlla il valore iniziale da utilizzare per la colonna identity. Il valore iniziale predefinito è 1.INCREMENT BY internval_value
definisce l’intervallo tra i valori generati. Per impostazione predefinita, il valore dell’intervallo è 1.CACHE
definisce un numero di valori che Oracle dovrebbe generare in anticipo per migliorare le prestazioni. Questa opzione viene utilizzata per la colonna con un numero elevato di inserti.
Oracle identity column examples
Prendiamo alcuni esempi di utilizzo delle Oracle identity columns.,
A) GENERATO SEMPRE esempio
L’istruzione seguente crea una tabella denominata identity_demo
che consiste di una colonna di identità:
La seguente dichiarazione inserisce una nuova riga nel identity_demo
tabella:
Perché non si specifica un valore per il id
colonna, Oracle automaticamente generata una sequenza di valore a partire dal 1.,
La seguente dichiarazione tenta di inserire un valore nel id
colonna di identità:
Oracle rilascia un errore:
Perché la colonna id è stato definito come GENERATED ALWAYS
non potrebbe accettare qualsiasi valore fornito.,
B) GENERATED BY DEFAULT example
Let’s change the id
column to GENERATED BY DEFAULT
:
The following statement inserts a new row into the identity_demo
table:
It worked as expected.,
La seguente istruzione inserisce una nuova riga nella tabella identity_demo
con un valore fornito per la colonna id
:
In questo esempio, Oracle ha utilizzato il valore fornito e lo ha inserito nella tabella.,Primo, ricrea il identity_demo
tabella di cui il id
colonna è definita come identità colonna con il valore iniziale parte da 100:
Secondo, inserire una riga nel identity_demo
tabella:
Terzo, query di dati identity_demo
tabella:
Come si può vedere, il valore iniziale del id
colonna è di 100, come specificato nella clausola identity.,
E) INCREMENTO PER opzione esempio
Innanzitutto, modificare la colonna id della tabellaidentity_demo
che include entrambe le opzioniSTART WITH
eINCREMENT BY
.
Secondo, inserire due righe in un identity_demo
tabella:
Terzo, query di dati della tabella per verificare gli inserimenti:
Come si può vedere, la prima riga è il valore di id 10. La seconda riga ha il valore id 20., Questo è ciò che abbiamo definito per la colonna id che dovrebbe iniziare con 10 e aumentare di 10 per la nuova riga.
Oracle identity column restrictions
Le colonne identity sono soggette alle seguenti restrizioni:
- Ogni tabella ha una e una sola colonna identity.
- Il tipo di dati della colonna identity deve essere un tipo di dati numerico. il tipo di dati definito dall’utente non può essere utilizzato con la clausola identity.
- La colonna identity non è ereditata dall’istruzione
CREATE TABLE AS SELECT
., - La colonna identity non può avere un altro vincolo
DEFAULT
. - L’algoritmo di crittografia per le colonne di identità crittografate può essere dedotto quindi è necessario utilizzare un algoritmo di crittografia forte.
- Il vincolo inline della colonna identity non deve entrare in conflitto con il vincolo
NOT NULL
eNOT DEFERRABLE
dichiarato dalla clausola identity.
In questo tutorial, hai imparato come utilizzare la colonna Oracle identity che consente di definire facilmente una colonna numerica generata automaticamente per una tabella.,
- Questo tutorial è stato utile?
- Sì