aggiornare database in sicurezza

Insert, update e delete per aggiornare in sicurezza un database

In questo 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. Durante i nostri corsi di Sql proponiamo sempre il seguente 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).

Vediamo nel dettaglio come operazione per operazioni.

 

Cancellare righe da una tabella

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 infatti di controllare quello che andiamo a cancellare definitivamente dal database. Se ad esempio vogliamo cancellare nel nostro database CorsoSql i clienti del Piemonte dobbiamo:

1. Scrivere la query d’interrogazione

SELECT  *

FROM    Clienti

WHERE regione=’Piemonte’

2. controllare il risultato

3. sostituire la riga contenente “SELECT *” con una riga contenente la parola “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 non avremmo modo infatti di controllare quello che andiamo a scrivere definitivamente nel database.

Se ad esempio vogliamo inserire nella tabella Clienti del nostro database CorsoSql un cliente con questi dati occorre:

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

 

1.scrivere la query d’interrogazione

SELECT 11 as  NumeroCliente,

               ‘Nicola’ as Nome,

               ‘Iantomasi’ as Cognome,

               ‘1980-10-17’ as DataNascita,

               ‘Piemonte’ as RegioneResidenza

2. controllare il risultato

3. a questo punto basterà aggiungere in alto una riga contenente INSERT INTO <nometabella> (<colonna1>,<colonna2>,…<colonnaN>). Nel nostro caso avremmo

INSERT INTO Clienti (NumeroCliente, Nome, Cognome, DataNascita, RegioneResidenza)

SELECT   11 as  NumeroCliente,

        ‘Nicola’ as Nome,

        ‘Iantomasi’ as Cognome,

        ‘1980-10-17’ as DataNascita,

        ‘Piemonte’ as RegioneResidenza

Ecco alcuni ulteriori suggerimenti:

  • possiamo ovviamentescrivere una query contenente anche FROM e WHERE per acquisire i dati da inserire in un’altra tabella;
  • occorre fare  massima attenzione all’ordine delle colonne e ai relativi tipi
  • fare attenzione alla presenza di colonne di tipo identity
  • date un’occhiata anche ad una sintassi equivalente che utilizza la keyword VALUES

 

Modificare i dati in una tabella

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. Proseguiamo con un esempio: vogliamo modificare nella tabella clienti la regione di residenza del cliente numero 1.

NumeroCliente Nome Cognome DataNascita RegioneResidenza
1 Nicola Iantomasi 17/10/1980 Piemonte

 

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 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 la keyword 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 si vogliono aggiornare più colonne basta separarle da una virgola, ad esempio possiamo scrivere
  • A  destra dell’uguale possiamo utilizzare anche un’altra colonna della tabella o una funzione su essa:
  • nel caso occorra modificare un valore con un dato proveniente da un’altra tabella, occorre scrivere una 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

 

Insert, Update e Delete: e adesso?

Se vuoi approfondire altri temi sul linguaggio SQL ecco il link all’elenco di tutti gli articoli del blog sul tema database. Eroghiamo inoltre formazione sull’SQL per tutti i livelli, con il corso di introduzione a SQL e ai database relazionali imparerai a scrivere query in modo corretto ed efficiente.

Torna su