Brook Preloader

DML, modifica ed eliminazione di un record

Modifica

La modifica di un record ha come diretto requisito la selezione di una ed una o più righe all’interno della tabella selezionata.

Il comando da utilizzare per effettuare la modifica è UPDATE SET WHERE ; la lista dei campi da modificare può essere parziale poiché si può decidere di lasciare intatti alcuni dati e modificarne altri.

Vediamo lo statement da utilizzare per effettuare la modifica del nome e del numero di telefono di un dato preesistente:

 

UPDATE Persona SET nome = 'Giovanni Carmine', num_tel = "+39 000111" WHERE personaID = 1;

Le caratteristiche che si evincono dallo statement appena illustrato sono:

 

  • L’elenco dei dati da modificare subisce le regole del = per ogni dato che vogliamo modificare del record, si tratta di una sequenza di operazioni separate da virgola totalmente indipendenti l’una dall’altra.
  • La keyword WHERE serve a filtrare le righe che dovranno essere coinvolte nella modifica, in questo caso si tratta di una modifica puntuale poiché abbiamo la certezza che verrà coinvolta una ed una sola riga dato che si tratta di un campo univoco (ricordiamo che personaID è una PRIMARY KEY).
  • La modifica illustrata è SAFE e rispetta il SAFE UPDATE introdotto da MySQL 8.x perché non rischia di modificare in maniera incontrollata più di una riga.
  • Il risultato dell’operazione sarà nominato come affected rows ovvero righe coinvolte nel processo di modifica. In questo caso, dato che si tratta di una modifica puntuale il numero di affected rows potrà assumere solo due valori, 1 nel caso in cui il processo va a buon fine, 0 se la modifica non viene accettata dal DBMS.
    I motivi di non accettazione della modifica da parte del DBMS sono principalmente due, o la riga con la PRIMARY KEY selezionata non viene trovata oppure stiamo violando dei constraint (vincoli) all’interno del campo da modificare.

 

Eliminazione

L’eliminazione di un record rispetta gli stessi vincoli della modifica, un record per essere eliminato deve necessariamente essere identificato univocamente.

Il comando da utilizzare per effettuare la modifica è DELETE FROM WHERE ; dove all’interno del filtro deve necessariamente essere presente un campo univoco di tipo PRIMARY KEY o UNIQUE.

Vediamo lo statement da utilizzare per effettuare l’eliminazione prima tramite PRIMARY KEY (personaID) e poi tramite campo UNIQUE (cod_fis):

 

DELETE FROM Persona WHERE personaID = 1;
DELETE FROM Persona WHERE cod_fis = 'RMOLAR';

Entrambi gli statement restituiranno il numero di affected rows ovvero di righe coinvolte nel processo di eliminazione.

Stiamo attenti al fatto che l’operazione di eliminazione non restituisce nessun errore nel caso in cui il record non venga trovato, infatti è buona norma verificare sempre il numero di righe coinvolte nell’operazione per avere la certezza che l’operazione sia andata a buon fine.

Riepilogando:

 

  • Se affected rows > 0 allora l’operazione di eliminazione è andata a buon fine
  • Se affected rows = 0 l’operazione di eliminazione è andata a buon fine ma non è stato eliminato alcun record perché il filtro sulle righe non corrisponde ad alcun sottoinsieme del contenuto.