Nella lezione precedente abbiamo visto come modificare i dati esistenti utilizzando UPDATE. Ora vediamo come eliminare le righe da una tabella con l'istruzione DELETE.
A differenza di UPDATE, che modifica i dati mantenendo le righe nella tabella, DELETE rimuove fisicamente le righe dal database.
DELETE permette di rimuovere dalla tabella le righe che soddisfano le condizioni specificate nella query.
La sintassi è: DELETE FROM tabella WHERE condizione;.
Per esempio, supponiamo di avere una tabella utenti. Possiamo eliminare l'utente con id uguale a 2 usando la seguente query:
DELETE FROM utenti WHERE id = 2;Dopo l'esecuzione della query, la tabella non conterrà più l'utente con id uguale a 2.
Per eliminare più righe all'interno della tabella, puoi modificare la condizione di WHERE in modo che vengano selezionate tutte le righe che vuoi rimuovere.
Ad esempio, questa istruzione elimina tutti gli utenti inattivi:
DELETE FROM utenti WHERE attivo = FALSE;Possiamo inoltre utilizzare gli operatori che abbiamo già visto, come IN, BETWEEN, LIKE e IS NULL:
DELETE FROM utenti WHERE id IN (3, 5, 8);Nota: se WHERE non viene specificato, la query DELETE elimina tutte le righe della tabella. A questo scopo, puoi utilizzare semplicemente TRUNCATE che abbiamo visto nella lezione sulle tabelle.
Come abbiamo visto nella lezione sull'integrità referenziale, con JOIN possiamo mettere in relazione più tabelle. MySQL permette di utilizzare un JOIN anche durante un'operazione di eliminazione.
Per esempio, supponiamo di avere due tabelle:
utenti, con colonne id e nome.ordini, con colonne id e utente_id.Possiamo eliminare gli utenti che hanno determinate caratteristiche utilizzando i dati presenti nella tabella ordini. La sintassi può essere:
DELETE u
FROM utenti AS u
JOIN ordini AS o
ON u.id = o.utente_id
WHERE o.stato = 'annullato';Nell'esempio, DELETE u indica che vogliamo eliminare le righe della tabella utenti rinominata u.
Nota: quando elimini una riga, devi fare attenzione anche alle foreign key che la collegano ad altre tabelle. Se, per esempio, un ordine contiene un utente_id che fa riferimento a un utente, il database potrebbe impedire l'eliminazione dell'utente se esistono ancora ordini collegati. In alternativa, se la foreign key è stata definita con ON DELETE CASCADE, l'eliminazione dell'utente può eliminare automaticamente anche le righe collegate. Per questo motivo, prima di utilizzare DELETE, è importante controllare le relazioni tra le tabelle e capire quali dati potrebbero essere eliminati.