0Pricing
SQL Academy · Lezione

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 it

Il 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

  1. Vincoli NOT NULL e CHECK
  2. Vincoli UNIQUE e chiavi composte
  3. FOREIGN KEY e azioni referenziali
  4. Valori DEFAULT e colonne generate
← Torna a SQL Academy