Vai al contenuto
eLearner.app
Modulo 8 · Lezione 2 di 430/57 nel corso~10 min
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

SQL
UPDATE tabella
SET    colonna1 = nuovo_valore,
       colonna2 = altra_espressione
WHERE  condizione;

Esempi:

SQL
-- 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

SQL
DELETE FROM tabella
WHERE  condizione;

Esempi:

SQL
-- 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:

SQL
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:

SQL
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

Esercizio#sql.m8.l2.e1
Tentativi: 0Caricamento…

Aumenta del 10% il prezzo di tutti i prodotti della categoria 5 (Computer). Una sola istruzione UPDATE.

Caricamento editor…
Mostra suggerimento

L'espressione a destra di SET può riferire la colonna stessa: price * 1.10.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#sql.m8.l2.e2
Tentativi: 0Caricamento…

Cancella tutte le recensioni con rating minore di 3 (recensioni molto negative).

Caricamento editor…
Mostra suggerimento

WHERE rating < 3.

Soluzione disponibile dopo 3 tentativi