Vincoli NOT NULL e CHECK
Impedisca i valori mancanti con NOT NULL e convalidi le regole del dominio con CHECK (price > 0, status IN ('active','archived'))
Vincoli NOT NULL e CHECK è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Perché usare i vincoli?
I vincoli spostano la validazione NEL database. Il vantaggio è enorme: ogni applicazione, script e query ad hoc scrive dati validi oppure fallisce in modo esplicito.
NOT NULL
Il vincolo più semplice: questa colonna deve avere un valore:
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL,
age INT -- NULL allowed
);Aggiungere NOT NULL in un secondo momento
Valorizzare prima i dati mancanti, quindi aggiungere il vincolo:
UPDATE users SET email = 'unknown@example.com' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email SET NOT NULL;Vincolo CHECK
Un'espressione booleana arbitraria che ogni riga deve rispettare:
CREATE TABLE products (
id BIGSERIAL PRIMARY KEY,
name TEXT NOT NULL,
price NUMERIC(10,2) NOT NULL CHECK (price > 0),
discount NUMERIC(5,2) DEFAULT 0 CHECK (discount BETWEEN 0 AND 100)
);CHECK con valori simili a un enum
Limitare una colonna a un insieme definito:
CREATE TABLE orders (
id BIGSERIAL PRIMARY KEY,
status TEXT NOT NULL
CHECK (status IN ('pending','paid','shipped','cancelled'))
);NULL supera CHECK senza segnalazioni
Un vincolo CHECK viene superato quando l'espressione è NULL (sconosciuta). Se serve una garanzia assoluta, combinarlo con NOT NULL:
CREATE TABLE invoices (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);CHECK su più colonne
È possibile fare riferimento a più colonne:
CREATE TABLE bookings (
start_at TIMESTAMPTZ NOT NULL,
end_at TIMESTAMPTZ NOT NULL,
CHECK (start_at < end_at)
);Aggiungere CHECK in un secondo momento
Convalidare prima le righe esistenti, quindi aggiungere il vincolo:
ALTER TABLE products
ADD CONSTRAINT positive_price CHECK (price > 0);
-- fails if any row violates itIl trucco di NOT VALID per le tabelle grandi
Evitare la scansione completa iniziale e convalidare in un secondo momento in background:
ALTER TABLE products
ADD CONSTRAINT positive_price CHECK (price > 0) NOT VALID;
ALTER TABLE products VALIDATE CONSTRAINT positive_price;Vincoli con nome
Assegnare sempre un nome ai vincoli, così i messaggi di errore e le migration sono prevedibili:
ALTER TABLE products
ADD CONSTRAINT products_price_positive CHECK (price > 0);Non duplicare la logica nell'applicazione
Se il database applica il vincolo, ogni percorso del codice ne trae vantaggio: non c'è più il rischio di "dimenticare la validazione". Mantenere una validazione duplicata nell'applicazione per migliorare l'esperienza utente (feedback immediato), ma considerare il database come fonte autorevole.
Riepilogo
NOT NULL e CHECK impediscono i dati errati più comuni.
- NOT NULL: nessun valore mancante
- CHECK: regole arbitrarie per ogni riga
- Usare NOT VALID + VALIDATE per aggiunte online
Verifica rapida
Che cosa succede se si scrive CHECK (price > 0) su una colonna priva di NOT NULL?
Domande Frequenti
La lezione «Vincoli NOT NULL e CHECK» è gratuita?
Sì — il testo completo di «Vincoli NOT NULL e CHECK» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Vincoli NOT NULL e CHECK»?
Impedisca i valori mancanti con NOT NULL e convalidi le regole del dominio con CHECK (price > 0, status IN ('active','archived')) Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Vincoli NOT NULL e CHECK»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Vincoli NOT NULL e CHECK
- Vincoli UNIQUE e chiavi composte
- FOREIGN KEY e azioni referenziali
- Valori DEFAULT e colonne generate