Lezioni del modulo (2/4)
Aggiornare ed eliminare: UPDATE e DELETE
UPDATE modifica righe esistenti; DELETE le rimuove. Entrambi hanno la
stessa, fondamentale, regola d'oro: la WHERE decide quali righe
toccare. Dimenticarla significa modificare/cancellare tutta la tabella.
UPDATE
UPDATE tabella
SET colonna1 = nuovo_valore,
colonna2 = altra_espressione
WHERE condizione;Esempi:
-- Aumenta del 10% i prezzi di tutti i prodotti della categoria 5 (Computer):
UPDATE products
SET price = price * 1.10
WHERE category_id = 5;
-- Aggiorna due colonne contemporaneamente:
UPDATE orders
SET status = 'shipped',
shipped_at = NOW()
WHERE id = 12;SET col = espressione: l'espressione può riferire i valori attuali
della riga (price * 1.10), così come usare NOW(), NULL, o
sotto-query.
DELETE
DELETE FROM tabella
WHERE condizione;Esempi:
-- Cancella tutte le recensioni con rating < 3:
DELETE FROM reviews
WHERE rating < 3;
-- Cancella un ordine specifico:
DELETE FROM orders WHERE id = 999;RETURNING anche qui
Come per INSERT, anche UPDATE e DELETE accettano RETURNING per
sapere su cosa hanno agito:
DELETE FROM reviews
WHERE rating < 3
RETURNING id, customer_id, rating;Utile per loggare in un colpo solo cosa è stato cancellato/modificato.
Foreign key e cancellazioni
Provare a cancellare una riga referenziata da un'altra tabella tramite foreign key produce un errore:
DELETE FROM customers WHERE id = 1;
-- ERROR: update or delete on table "customers" violates foreign key constraint
-- on table "orders"Soluzioni: cancellare prima le righe figlie, oppure definire la FK con
ON DELETE CASCADE quando si crea la tabella (lo vediamo nella prossima
lezione DDL).
Prova tu
Aumenta del 10% il prezzo di tutti i prodotti della categoria 5 (Computer). Una sola istruzione UPDATE.
Mostra suggerimento
L'espressione a destra di SET può riferire la colonna stessa: price * 1.10.
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Cancella tutte le recensioni con rating minore di 3 (recensioni molto negative).
Mostra suggerimento
WHERE rating < 3.
Soluzione disponibile dopo 3 tentativi