Lezioni del modulo (1/4)
Inserire dati: INSERT
Finora hai letto i dati. È il momento di scriverli. INSERT è il
comando per aggiungere nuove righe a una tabella.
La sintassi base
INSERT INTO tabella (col1, col2, …)
VALUES (val1, val2, …);Esempio sul nostro dataset:
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Marco', 'Bianchi', 'marco.bianchi@example.com', 'Verona', 'Italia', '2025-07-15');Nominare le colonne è la pratica raccomandata: rende la query robusta a
futuri cambi di schema (es. una nuova colonna phone opzionale non rompe
nulla) e auto-documentante.
INSERT multiplo
Una sola istruzione, più righe — molto più veloce di N INSERT separati:
INSERT INTO categories (name, parent_id) VALUES
('Gaming', 1),
('Smart Home', 1),
('Cucina vegana', 8);RETURNING: leggere i valori appena inseriti
Una clausola caratteristica di PostgreSQL: RETURNING restituisce le righe
appena create. Comodissimo per recuperare l'id auto-generato:
INSERT INTO categories (name, parent_id)
VALUES ('Gaming', 1)
RETURNING id, name;L'output è una tabella di una riga con id (assegnato dal SERIAL) e
name.
Cosa succede se manca una colonna
Se ometti una colonna nell'INSERT:
- se è
NOT NULLsenza DEFAULT → errore; - se ha un
DEFAULT(inclusoSERIALper id) → viene usato; - se accetta
NULL→ diventaNULL.
-- Va bene: id è SERIAL (auto), country ha NOT NULL ma forniamo tutti i campi
INSERT INTO customers (first_name, last_name, email, city, country, signed_up_on)
VALUES ('Olivia', 'Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');
-- Errore: first_name è NOT NULL e non è fornito
INSERT INTO customers (last_name, email, city, country, signed_up_on)
VALUES ('Marini', 'olivia.marini@example.com', 'Bari', 'Italia', '2025-07-20');Prova tu
Inserisci nella tabella customers un nuovo cliente con first_name 'Marco', last_name 'Bianchi', email 'marco.bianchi@example.com', city 'Verona', country 'Italia' e signed_up_on '2025-07-15'. Nomina esplicitamente tutte le colonne.
Mostra suggerimento
L'ordine dei valori in VALUES deve corrispondere all'ordine delle colonne nominate.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Inserisci una nuova categoria 'Gaming' come figlia di 'Elettronica' (id = 1). Usa la clausola RETURNING per restituire id e name della categoria appena creata.
Mostra suggerimento
RETURNING accetta un elenco di colonne (o '*') esattamente come una SELECT.
Soluzione disponibile dopo 3 tentativi