Insert, update e delete per aggiornare in sicurezza un database

In questa guida vedremo come scrivere in SQL in modo corretto e sicuro query di insert, update e delete per aggiornare un database Sql Server. Molto spesso queste operazioni risultano particolarmente delicate in quanto, a differenza di una semplice select, un errore nella loro scrittura potrebbe creare gravi problemi al database sottostante. Diventa dunque necessario avere una guida per procedere in modo sicuro e controllato. L’idea di base è quella di seguire sempre questo paradigma:

  • scrivere inizialmente una query che interroga il database (tramite una select);
  • modificarla con pochi e semplici passi in una query che lo aggiorna (tramite una delete, insert, update).

Cancellare righe da una tabella con delete

Se vogliamo cancellare delle righe da una tabella, dobbiamo preliminarmente scrivere la query di interrogazione (tramite una select) che le visualizzi. Questa passo è imprescindibile: scrivendo direttamente la delete non avremmo modo di controllare quello che andiamo a cancellare definitivamente dal database. Se ad esempio vogliamo cancellare i clienti del Piemonte, possiamo procedere così:

1. scriviamo la query d’interrogazione

SELECT *
FROM   Clienti
WHERE  Regione = 'Piemonte';

2. controlliamo il risultato;

3. sostituiamo la riga contenente “SELECT *” con una riga contenente l’istruzione “DELETE”. La query di cancellazione sarà dunque

DELETE
FROM  Clienti
WHERE Regione = 'Piemonte';

Inserire righe in una tabella

Anche in questo caso, dobbiamo preliminarmente scrivere la query di interrogazione (tramite una select) che  visualizzi le righe che vogliamo inserire. Scrivendo direttamente la insert, infatti, non avremmo modo di controllare quello che andiamo a scrivere definitivamente nel database.

Se ad esempio vogliamo inserire nella tabella Clienti una riga con questi dati:

NumeroCliente: 11
Nome: Nicola
Cognome: Iantomasi
DataNascita: 17/10/1990
RegioneResidenza: Piemonte

possiamo procediamo in questo modo:

1.scriviamo la query con la SELECT

SELECT 
  11 AS NumeroCliente, 
  'Nicola' AS Nome,
  'Iantomasi' AS Cognome,
  '19901017' AS DataNascita,
  'Piemonte' AS RegioneResidenza;

2. controlliamo il risultato;

3. aggiungiamo in alto una riga contenente INSERT INTO più il nome della tabella, più l’elenco delle colonne tra parentesi:

INSERT INTO Clienti(
  NumeroCliente, Nome, Cognome, 
  DataNascita, RegioneResidenza)
SELECT 
  11 AS NumeroCliente,
  'Nicola' AS Nome,
  'Iantomasi' AS Cognome,
  '19901017' AS DataNascita,  
  'Piemonte' AS RegioneResidenza;

Ecco alcuni ulteriori suggerimenti:

Modificare i dati in una tabella con update

A costo di essere ripetitivi, ripetiamo il solito paradigma: preliminarmente scriviamo una query di interrogazione (tramite una select) che visualizzi i vecchi e i nuovi valori, altrimenti non avremmo modo di controllare quello che andiamo a sovrascrivere definitivamente nel database. Ecco un esempio: modifichiamo nella tabella dei Clienti la regione di residenza del cliente numero 1.
1. Scriviamo la query d’interrogazione

SELECT *, 
  RegioneResidenza,
  'Lombardia' 
     AS RegioneResidenzaNew
FROM   Clienti
WHERE  NumeroCliente = 1;

2. controlliamo il risultato, facendo attenzione anche al numero di righe restituite;

3. modifichiamo la query precedente in questo modo:

3.1) spostiamo in alto la FROM

FROM  Clienti
SELECT *, 
  RegioneResidenza,
  'Lombardia'
    AS RegioneResidenzaNew
WHERE NumeroCliente = 1;

3.2) trasformiamo la FROM in UPDATE

UPDATE  Clienti
SELECT *, 
  RegioneResidenza,
  'Lombardia' 
   AS RegioneResidenzaNew
WHERE NumeroCliente = 1;

3.3) trasformiamo la SELECT in SET

UPDATE  Clienti
SET     *,   
  RegioneResidenza,
  'Lombardia' 
   AS RegioneResidenzaNew
WHERE NumeroCliente=1;

3.4) riportiamo dopo SET la colonna che si vuole modificare e il nuovo valore

UPDATE Clienti
SET    RegioneResidenza = 'Lombardia'
WHERE  NumeroCliente = 1;

Anche in questo caso aggiungiamo qualche suggerimento:

  • se vogliamo aggiornare più colonne, basta separarle da una virgola:
    UPDATE Clienti SET RegioneResidenza = 'Lombardia', Nome = 'Nicola' WHERE NumeroCliente = 1;
  • a destra dell’uguale possiamo utilizzare un’altra colonna della tabella o una funzione;
  • fare sempre massima attenzione a selezionare anche la clausola WHERE;
  • nel caso occorra modificare un valore con un dato proveniente da un’altra tabella, occorrerà scrivere un update con Join
UPDATE C
SET    C.Nome = A.Nome
FROM   Clienti AS C
INNER JOIN Archivio AS A
    ON C.IdCliente = A.IdCliente
WHERE  C.IdCliente = 1;

Continua a imparare

Torna in alto
Torna su