logo

SQL | Vincolo UNICO

Il vincolo UNIQUE in SQL garantisce che i valori in una colonna o in un insieme di colonne siano distinti evitando duplicati. A differenza di una CHIAVE PRIMARIA consente più valori NULL poiché ogni NULL viene trattato come unico mentre una chiave primaria richiede che tutti i valori siano univoci e non NULL.

Caratteristiche:

  • Garantisce che le colonne abbiano valori univoci.
  • Sono consentiti più NULL.
  • Può applicarsi a una o più colonne.
  • Non crea automaticamente un indice (sebbene molti database lo facciano per motivi di prestazioni).
  • Può essere aggiunto o rimosso utilizzando ALTER TABLE.

Sintassi:



elenco collegato Java
CREATE TABLE table_name (  
 column1 datatype UNIQUE
 column2 datatype
 ...
);

Nella sintassi sopra:

  • CREA TABELLA nome_tabella: crea una nuova tabella.
  • tipo di dati colonna1 UNICO: definisce una colonna con un tipo di dati e applica valori univoci.
  • tipo di dati colonna2: definisce un'altra colonna senza il vincolo univoco.
  • Ripetere per le colonne aggiuntive secondo necessità.

Esempio di utilizzo del vincolo SQL UNIQUE

Esempio 1: creazione di una tabella con vincoli UNICI

Creiamo una tabella Clienti in cui la colonna Email deve essere univoca.

CREATE TABLE Customers (  
CustomerID INT PRIMARY KEY
Name VARCHAR(100)
Email VARCHAR(100) UNIQUE
Country VARCHAR(50)
);

In questo caso ogni cliente deve avere un indirizzo email univoco. Se provi a inserire un'e-mail duplicata SQL genererà un errore.

INSERT INTO Customers (CustomerID Name Email Country)  
VALUES (1 'John Doe' '[email protected]' 'USA');

INSERT INTO Customers (CustomerID Name Email Country)
VALUES (2 'Jane Smith' '[email protected]' 'Canada');

-- This will fail because '[email protected]' already exists
INSERT INTO Customers (CustomerID Name Email Country)
VALUES (3 'Alice Johnson' '[email protected]' 'UK');

Il terzo inserimento avrà esito negativo poiché l'e-mail [email protected] esiste già nella tabella Clienti.

Esempio 2: utilizzo di UNIQUE con più colonne

Possiamo anche applicare il vincolo UNIQUE a più colonne per garantire che la combinazione di tali colonne sia unica.

CREATE TABLE Orders (  
OrderID INT PRIMARY KEY
CustomerID INT
ProductID INT
OrderDate DATE
UNIQUE (CustomerID ProductID)
);

In questo esempio la combinazione di CustomerID e ProductID deve essere univoca, il che significa che un cliente non può ordinare lo stesso prodotto più di una volta.

Esempio 3: controllo di valori univoci utilizzando sottoquery

SQL consente di verificare l'unicità nelle sottoquery. È possibile utilizzare la parola chiave UNIQUE in una sottoquery per garantire che i risultati non contengano valori duplicati.

SELECT CustomerID  
FROM Orders
WHERE UNIQUE (
SELECT OrderID
FROM OrderDetails
WHERE Orders.CustomerID = OrderDetails.CustomerID
);

In questo esempio controlliamo se sono presenti valori OrderID duplicati per ciascun cliente nella tabella Orders. Se la sottoquery restituisce valori univoci, verrà selezionato CustomerID.

Punti importanti

  • Restituisce true in una sottoquery vuota.
  • Restituisce vero solo se sono presenti tuple univoche come output della sottoquery (due tuple sono uniche se il valore di qualsiasi attributo delle due tuple è diverso).
  • Restituisce vero se la sottoquery ha due righe duplicate con almeno un attributo NULL.
Quiz suggerito Modifica quiz 6 domande

Cosa garantisce il vincolo UNIQUE in SQL?

  • UN

    La colonna memorizza solo i valori che rimangono non duplicati

  • B

    La colonna consente valori senza controllare i duplicati

  • C

    La colonna accetta più valori identici nelle righe

  • D

    La colonna memorizza solo valori che sono sempre diversi da NULL

Spiegazione:

UNIQUE garantisce che tutti i valori nella colonna (o nel gruppo di colonne) debbano essere distinti evitando voci duplicate.

In cosa differisce UNIQUE da una CHIAVE PRIMARIA?

  • UN

    UNIQUE consente molti valori NULL; la chiave primaria no

  • B

    UNIQUE rimuove i NULL; la chiave primaria memorizza sempre NULL

  • C

    UNICO forza l'indicizzazione; la chiave primaria impedisce gli indici

  • D

    UNIQUE impone l'ordinamento; la chiave primaria evita l'ordinamento

Spiegazione:

UNIQUE consente più valori NULL perché ogni NULL è considerato diverso a differenza di una PRIMARY KEY che vieta completamente i NULL.

sistema operativo di rete

Cosa succede quando si inserisce un valore duplicato in una colonna UNICA?

  • UN

    SQL accetta righe duplicate e memorizza entrambi i valori

  • B

    SQL sostituisce il valore precedente con quello inserito più recentemente

  • C

    SQL rifiuta i duplicati e genera un errore di integrità

  • D

    SQL converte automaticamente il valore duplicato in un NULL

Spiegazione:

Se un valore viola il vincolo UNIQUE SQL blocca l'inserimento o l'aggiornamento e segnala un errore.

Quale affermazione su UNIQUE e NULL è corretta?

  • UN

    UNIQUE tratta tutti i valori NULL come duplicati uguali

  • B

    UNIQUE tratta tutti i valori NULL come righe univoche separate

  • C

    UNIQUE converte tutte le voci NULL in stringhe vuote

  • D

    UNIQUE consente NULL solo quando non esistono dati nella colonna

Spiegazione:

Sono consentiti più NULL perché ogni NULL viene valutato come un valore distinto e incomparabile in UNIQUE.

Perché molti database creano un indice per UNIQUE?

  • UN

    Per organizzare i valori in ordine alfabetico prima di inserirli

  • B

    Per formattare i dati numerici prima di memorizzarli nella tabella

  • C

    Per convertire NULL in valori sequenziali univoci

  • D

    Per migliorare il controllo dei duplicati durante la validazione

Spiegazione:

Un indice aiuta il motore a rilevare rapidamente i valori duplicati rendendo più efficiente l'applicazione del vincolo UNIQUE.

stringa al carattere Java

Cosa controlla la parola chiave UNIQUE in una sottoquery?

  • UN

    Garantisce che la sottoquery restituisca esattamente una colonna numerica

  • B

    Garantisce che l'output della sottoquery contenga solo righe distinte

  • C

    Garantisce che la sottoquery confronti i valori senza utilizzare i join

  • D

    Garantisce che la sottoquery ignori le righe che contengono NULL

Spiegazione:

UNIQUE verifica che la sottoquery non produca tuple duplicate: ciascuna riga restituita deve differire in almeno un attributo.

SQL | Vincolo UNICOQuiz completato con successo Il tuo punteggio:  2/6Precisione: 0%Accedi per visualizzare la spiegazione 1/6 1/6 < Previous Avanti >