Cancellare i record della tabella con SQL

Tempo di lettura stimato: 4 minuti

Spesso si sente parlare di cancellare i record delle tabelle con SQL, ma come si fa, se non l'avete mai fatto prima?

Nei video precedenti su SQL abbiamo discusso come aggiornare i record in SQL, come inserire dati in una tabella in SQL.

Potreste trovarvi di fronte allo scenario in cui ci sono dati di cui non avete più bisogno, di conseguenza, devono essere eliminati.

Lavoriamo quindi attraverso tre diversi scenari come segue:

(A) Elimina un record basato su un identificatore unico, in questo caso CUSTOMER_NO.

(B)Cancellare più record di clienti in una volta sola usando CUSTOMER_NO come colonna che identificherà i record.

(C) Cancellare un record dove è uguale a un particolare valore di colonna.

Il nostro set di dati iniziale sarà così:

Questa immagine ha un attributo alt vuoto; il suo nome di file è image-14.png

Cancellare un record in base a un identificatore unico

ELIMINARE DA dbo.CUSTOMER DOVE CUSTOMER_NO = 987981

selezionare * da dbo.CUSTOMER

Quando il codice di cui sopra viene eseguito dà il seguente output.

Come si può vedere ora ha dieci record e la riga per CUSTOMER_NO = 987981 è stata rimossa.

Questa immagine ha un attributo alt vuoto; il suo nome di file è image-15.png

Cancellare più record di clienti in una volta sola

Nello scenario precedente abbiamo cancellato un solo record, ma molto probabilmente vorrete rimuoverne più di uno.

Questo codice qui sotto completerà tutto questo in una volta sola. Ricordate che la colonna che stiamo usando è una colonna chiave primaria, quindi tutti i valori sono unici.

Può essere il caso che dobbiate fare questo su una colonna che non ha valori unici, il codice funzionerà comunque.

Vi avverto però che usare il valore della colonna chiave primaria vi permette sempre di rimuovere solo quelli che non sono necessari.

Potrebbe essere il caso che ci siano valori genuini che devono rimanere, anche se sono duplicati.

DELETE FROM dbo.CUSTOMER WHERE CUSTOMER_NO in(3,25897458,25898633)

selezionare * da dbo.CUSTOMER
Questa immagine ha un attributo alt vuoto; il suo nome di file è image-16.png

Come si può vedere l'esecuzione del codice di cui sopra ci lascia ora con sette righe, da dieci, e le tre righe che avevamo nell'SQL sono state rimosse.

Cancellare un record quando è uguale a un particolare valore di colonna

Quindi il nostro scenario finale è dove abbiamo bisogno di trovare un particolare valore in una colonna, ed esiste, quindi eliminare l'intero record per quella riga.

Qui non ci basiamo sulla chiave primaria, ma fondamentalmente su una ricerca di stringhe nella colonna customer_type.

Quando questo SQL viene eseguito, si suppone che rimuova due righe e ci lasci con cinque record.

Il problema che incontrerete

Ci sarà un problema con questo perché la chiave primaria, anche se non è stata referenziata, darà un errore.

L'errore in questo caso riguarda il CUSTOMER_NO della tabella customer

  • Ha una colonna equivalente a una chiave esterna nella tabella delle vendite.

In sostanza non potete tralasciare il valore della chiave primaria quando completate questo statement SQL.

Di conseguenza, entrambe le tabelle devono essere aggiornate, dove il valore della chiave primaria esiste.

DELETE FROM dbo.CUSTOMER WHERE customer_type = 'POSTAL'

selezionare * da dbo.CUSTOMER
** il codice di cui sopra fallirà con il seguente errore:
L'istruzione DELETE è andata in conflitto con il vincolo REFERENCE "FK__SALES__CUSTOMER___267ABA7A". Il conflitto si è verificato nel database "SALES", tabella "dbo.SALES", colonna 'CUSTOMER_NO'.
La dichiarazione è stata terminata.

La nostra tabella delle vendite si presenta così:

Questa immagine ha un attributo alt vuoto; il suo nome di file è image-17.png

Aggiornando la nostra logica come segue:

ELIMINARE DA dbo.SALES
dove SALES.CUSTOMER_NO = 123458 ---> Questa linea ha bisogno di essere eseguita prima come la prossima linea controlla se questo esiste come chiave esterna.
ELIMINARE DA dbo.CUSTOMER
dove CLIENTE.CLIENTE_NO = 123458
e customer_type = 'POSTAL'


selezionare * da dbo.CUSTOMER
selezionare * da dbo.SALES

Risultati in:

Questa immagine ha un attributo alt vuoto; il suo nome di file è image-18.png

Per riassumere, ci sono diverse cose da considerare:

  • È importante controllare sempre se c'è una relazione di chiave primaria e straniera.
  • In particolare, non controllando queste relazioni, l'SQL produrrà un errore.
  • In queste circostanze si consiglia di rivedere tutte le tabelle prima di procedere.
  • Assicurati di avere un backup delle tue tabelle prima di fare qualsiasi cancellazione!