SQL Academy · Lezione

Valori DEFAULT e colonne generate

Fornisca valori DEFAULT (NOW(), uuid_generate_v4(), 'pending') e calcoli i valori al volo con colonne GENERATED ALWAYS AS

Lezione 4 di 413 passaggi

Valori DEFAULT e colonne generate è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 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.

DEFAULT: compilare automaticamente i valori mancanti

Quando INSERT omette una colonna, viene usato il DEFAULT:

CREATE TABLE users (
  id BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL,
  status TEXT NOT NULL DEFAULT 'active',
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

DEFAULT comuni

Sono schemi che verranno usati ovunque:

created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
id UUID PRIMARY KEY DEFAULT gen_random_uuid()
is_active BOOLEAN NOT NULL DEFAULT true
status TEXT NOT NULL DEFAULT 'pending'

Aggiungere un DEFAULT in un secondo momento

Le righe esistenti non vengono valorizzate automaticamente: solo i nuovi inserimenti usano il valore predefinito:

ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- For existing rows, backfill manually:
UPDATE users SET status = 'active' WHERE status IS NULL;

Aggiungere NOT NULL con DEFAULT

PostgreSQL 11+ supporta l'aggiunta rapida di colonne NOT NULL con un DEFAULT costante: la tabella non viene riscritta:

ALTER TABLE users
  ADD COLUMN signup_source TEXT NOT NULL DEFAULT 'web';
-- Fast in PG 11+, slow before

Colonne generate calcolate (STORED)

Una colonna il cui valore viene calcolato automaticamente a partire da altre colonne:

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  qty INT NOT NULL,
  unit_price NUMERIC(10,2) NOT NULL,
  total NUMERIC(12,2) GENERATED ALWAYS AS (qty * unit_price) STORED
);

INSERT INTO orders (qty, unit_price) VALUES (3, 9.99);
SELECT * FROM orders;       -- total is auto-filled

tsvector generato per la ricerca full-text

Un ottimo utilizzo delle colonne generate STORED:

ALTER TABLE articles
  ADD COLUMN search_doc tsvector
    GENERATED ALWAYS AS (to_tsvector('english', title || ' ' || body)) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN(search_doc);

Colonne generate virtuali

Oggi PostgreSQL supporta solo STORED (le colonne virtuali arriveranno nelle versioni future). Altri database, come MySQL, supportano colonne VIRTUAL che eseguono il calcolo al momento del SELECT.

Non è possibile usare INSERT nelle colonne generate

Scrivere in una di esse genera un errore: vengono calcolate, non memorizzate manualmente:

INSERT INTO orders (qty, unit_price, total) VALUES (3, 9.99, 30);
-- ERROR: column "total" can only be updated to DEFAULT

Valori predefiniti basati su sequenze

SERIAL/BIGSERIAL è una forma abbreviata per «valore predefinito da una sequenza»:

-- Roughly equivalent:
CREATE TABLE t (id BIGSERIAL PRIMARY KEY);

-- =>
CREATE SEQUENCE t_id_seq;
CREATE TABLE t (id BIGINT PRIMARY KEY DEFAULT nextval('t_id_seq'));
ALTER SEQUENCE t_id_seq OWNED BY t.id;

Colonne IDENTITY

Il modo conforme allo standard SQL per definire un'identità:

CREATE TABLE t (
  id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name TEXT
);

-- GENERATED BY DEFAULT AS IDENTITY allows explicit overrides.

DEFAULT e logica di business

Mantenga semplici i valori predefiniti. La logica complessa appartiene al codice dell'applicazione o a un trigger BEFORE INSERT.

Riepilogo

DEFAULT riempie i campi vuoti; GENERATED calcola i valori a partire da altre colonne.

  • NOW(), gen_random_uuid(), valori letterali costanti
  • Le colonne STORED calcolate sono ideali per i dati derivati
  • Le colonne identity sono il pattern moderno per le PK

Verifica rapida

Quale clausola fa sì che una colonna venga valorizzata automaticamente con l'ora corrente al momento di INSERT se non viene fornito alcun valore?

Gratis per iniziare

Impara SQL con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
46
Lezioni
183

Domande Frequenti

La lezione «Valori DEFAULT e colonne generate» è gratuita?

Sì — il testo completo di «Valori DEFAULT e colonne generate» è 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 «Valori DEFAULT e colonne generate»?

Fornisca valori DEFAULT (NOW(), uuid_generate_v4(), 'pending') e calcoli i valori al volo con colonne GENERATED ALWAYS AS 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 4 di 4.

Quanto tempo richiede la lezione «Valori DEFAULT e colonne generate»?

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