Clausola CONSTRAINT

Importante :  Il presente articolo è stato tradotto automaticamente, vedere la dichiarazione di non responsabilità. Per visualizzare la versione inglese dell'articolo, fare clic qui.

Un vincolo è simile a un indice, sebbene possa essere utilizzato anche per stabilire una relazione con un'altra tabella.

La proposizione CONSTRAINT viene utilizzata nelle istruzioni ALTER TABLE e CREATE TABLE per creare o eliminare vincoli. Esistono due tipi di proposizioni CONSTRAINT: il primo tipo consente di creare un vincolo in un singolo campo, mentre il secondo tipo consente di creare vincoli in più campi.

Nota : Motore di database di Microsoft Access non supporta l'uso di VINCOLO o una delle istruzioni di data definition language, con i database non di Microsoft Access. Utilizzare i metodi DAO Create.

Sintassi

Vincolo in un singolo campo:

Nome del VINCOLO {CHIAVE PRIMARIA | UNIVOCO | NON NULL |
RIFERIMENTI foreignTabella [(foreignfield1, foreignfield2)]
[a CATENA UPDATE via | IMPOSTARE NULL]
[a CATENA ELIMINA via | IMPOSTARE NULL]}

Vincolo in più campi:

Nomedel VINCOLO
{CHIAVE PRIMARIA (primary1[, primary2 [,...]]) |
UNIVOCO (unique1[, unique2 [,...]]) |
NON NULL (notnull1[, notnull2 [,...]]) |
CHIAVE ESTERNA [ALCUN INDICE] (rif1[, rif2 [,...]]) RIFERIMENTI foreigntable [(foreignfield1 [, foreignfield2 [,...]])]
[A CATENA UPDATE via | IMPOSTARE NULL]
[a CATENA ELIMINA via | IMPOSTARE NULL]}

La clausola CONSTRAINT è composta dalle parti seguenti:

Parte

Descrizione

nome

Nome del vincolo da creare.

primaria1, primaria2

Nome del campo o dei campi da definire come chiave primaria.

univoca1, univoca2

Nome del campo o dei campi da definire come chiave univoca.

nonnull1, nonnull2

Il nome del campo o i campi che sono limitati a valori non Null.

rif1, rif2

Nome del campo o dei campi di una chiave esterna che fanno riferimento ai campi di un'altra tabella.

tabellaesterna

Nome della tabella della chiave esterna contenente il campo o i campi specificati da campoesterno.

campoesterno1, campoesterno2

Nome del campo o dei campi della tabellaesterna indicati da rif1 e rif2. È possibile omettere questa proposizione se il campo di riferimento corrisponde alla chiave primaria della tabellaesterna.


Osservazioni

La sintassi per la creazione di un vincolo in un singolo campo viene utilizzata nella proposizione di definizione del campo di un'istruzione ALTER TABLE o CREATE TABLE, subito dopo la specifica del tipo di dati del campo.

La sintassi per la creazione di un vincolo in più campi deve essere utilizzata tutte le volte che si utilizza la parola riservata CONSTRAINT al di fuori della proposizione di definizione di un campo in un'istruzione ALTER TABLE o CREATE TABLE.

La clausola CONSTRAINT consente di assegnare a un campo uno dei seguenti tipi di vincoli:

  • Utilizzando la parola riservata UNIQUE è possibile definire un campo come chiave univoca, in modo che la tabella non possa contenere due record con lo stesso valore del campo specificato. Qualsiasi campo o elenco di campi può essere definito come univoco. Se come chiave univoca viene definito un vincolo in più campi, la combinazione dei valori di tutti i campi dell'indice dovrà essere univoca, anche se due o più record includono lo stesso valore in uno solo dei campi.

  • Utilizzando la parola riservata PRIMARY KEY è possibile definire un campo o un insieme di campi di una tabella come chiave primaria. Tutti i valori della chiave primaria devono essere univoci e diversi da Null. Ogni tabella può inoltre includere una sola chiave primaria.

    Nota : Se si imposta un vincolo PRIMARY KEY in una tabella che già include una chiave primaria, si verificherà un errore.

  • Utilizzando la parola riservata FOREIGN KEY è possibile definire un campo come chiave esterna. Se la chiave primaria della tabella esterna include più campi, è necessario utilizzare una definizione di vincolo in più campi, elencando tutti i campi di riferimento, il nome della tabella esterna e i nomi dei campi della tabella esterna a cui viene fatto riferimento, nello stesso ordine in cui vengono elencati i campi di riferimento. Non è necessario specificare i campi a cui viene fatto riferimento se questi sono stati definiti come chiave primaria della tabella esterna. Per impostazione predefinita, il modulo di gestione di database presume che la chiave primaria della tabella esterna corrisponda ai campi a cui viene fatto riferimento.

    I vincoli di chiave esterna consentono di specificare l'esecuzione di determinate operazioni quando viene modificato un valore della chiave primaria corrispondente.

  • È possibile associare l'esecuzione di un'azione nella tabella esterna all'esecuzione di un'azione corrispondente in una chiave primaria della tabella per cui è stata definita la proposizione CONSTRAINT. Si consideri ad esempio la definizione seguente della tabella Clienti:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Nella definizione seguente della tabella Ordini viene creata una relazione di chiave esterna che fa riferimento alla chiave primaria della tabella Clienti:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Sia la proposizione ON UPDATE CASCADE che la proposizione ON DELETE CASCADE vengono definite in relazione alla chiave esterna. La prima proposizione consente di replicare nella tabella Ordini l'aggiornamento di un valore identificativo del cliente (IdCliente) eseguito nella tabella Clienti. Ogni ordine contenente il valore identificativo del cliente corrispondente verrà automaticamente aggiornato in base al nuovo valore. La seconda proposizione consente di estendere l'eliminazione di un cliente dalla tabella Clienti a tutte le righe della tabella Ordini che contengono lo stesso valore identificativo del cliente.

Si consideri la diversa definizione della tabella Ordini riportata di seguito, in cui viene utilizzata l'azione SET NULL invece dell'azione CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

La proposizione ON UPDATE SET NULL consente di stabilire che, in caso di aggiornamento del valore identificativo di un cliente (IdCliente) nella tabella Clienti, i valori della chiave esterna corrispondenti nella tabella Ordini verranno automaticamente impostati su NULL. Analogamente, la proposizione ON DELETE SET NULL consente di stabilire che, se viene eliminato un cliente dalla tabella Clienti, tutte le chiavi esterne corrispondenti nella tabella Ordini verranno automaticamente impostate su NULL.

Per impedire la creazione automatica di indici di chiave esterne, è possibile utilizzare il modificatore NO INDEX. È consigliabile utilizzare questa definizione di chiave esterna solo nel caso in cui i valori dell'indice ottenuto vengano duplicati frequentemente. In questo caso, infatti, l'utilizzo di un indice è meno efficace rispetto alla semplice analisi della tabella. La gestione di questo tipo di indice, con continui inserimenti ed eliminazioni di righe, influisce negativamente sulla prestazioni senza offrire alcun vantaggio.



Nota : Dichiarazione di non responsabilità per la traduzione automatica: Il presente articolo è stato tradotto tramite un software di traduzione automatica e non da una persona. Microsoft offre le traduzioni automatiche per consentire a coloro che non conoscono la lingua inglese di leggere gli articoli sui prodotti, sui servizi e sulle tecnologie Microsoft. Dal momento che l'articolo è stato tradotto automaticamente, potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli.

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa al programma Office Insider

Queste informazioni sono risultate utili?

Grazie per i tuoi commenti e suggerimenti

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×