mysql delete statement delete command syntax
Questo tutorial spiega come utilizzare l'istruzione DELETE di MySQL per eliminare i dati da una tabella o eliminare l'intera tabella e la differenza tra i comandi di troncamento ed eliminazione:
In MySQL, DELETE è un linguaggio di manipolazione dei dati o DML, come sappiamo.
Come suggerisce il nome stesso, il comando viene utilizzato per eliminare le righe dalla tabella. Utilizzando questo comando, possiamo eliminare una o più righe indesiderate in una singola transazione. Esistono diversi modi per eliminare i record da una tabella utilizzando il comando DELETE.
converte il carattere in intero c ++
In questo tutorial, discuteremo tutti questi in dettaglio insieme a semplici esempi.
Cosa imparerai:
- Comando MySQL DELETE
- Differenza tra istruzioni TRUNCATE e DELETE
- Integrità referenziale e suo impatto su DELETE
- Domande e risposte frequenti
- Conclusione
Comando MySQL DELETE
C'è un fattore importante da tenere a mente prima di procedere. Qualsiasi riga o più righe che eliminiamo utilizzando il comando DELETE non possono essere recuperate.
Pertanto, per evitare scenari in cui una riga viene eliminata per errore, è consigliabile eseguire un backup della tabella prima di eseguire l'istruzione DELETE. In seguito possiamo utilizzare questo backup per ripristinare la tabella in caso di errori.
Nota: Stiamo usando MySQL versione 8.0. Puoi scaricarlo da Qui .
Sintassi di eliminazione di MySQL:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
Spiegazione della sintassi:
- La sintassi inizia con la parola chiave 'DELETE FROM', informando in tal modo il server MySQL sul tipo di attività da eseguire. Questa è una parola chiave obbligatoria e non può essere omessa.
- Segue il nome della tabella in cui deve essere eseguita l'operazione DELETE. Anche questo è obbligatorio e non può essere omesso. Possiamo menzionare uno o più nomi di tabella qui.
- Successivamente, possiamo menzionare qualsiasi condizione che controlla l'idoneità delle righe da eliminare. Questa è una clausola facoltativa. La parola chiave qui è DOVE.
- Seguita dalla clausola WHERE è la clausola ORDER BY, che impone l'eliminazione delle righe in un ordine particolare, crescente o decrescente, su una o più colonne. Questa è una clausola facoltativa.
- La clausola LIMIT segue la clausola ORDER BY. Mette un limite al numero di righe che l'istruzione DELETE può rimuovere dalla tabella.
Modificatori nell'istruzione DELETE
# 1) LOW_PRIORITY:
Questo modificatore informa il motore MySQL di ritardare l'esecuzione dell'istruzione DELETE fino a quando non ci sono connessioni in lettura dalla tabella da cui stiamo tentando di DELETE.
Ciò aiuta a ottenere la coerenza tra tutte le altre operazioni che verranno eseguite su quella tabella. Questo aiuta anche a evitare problemi di blocco della tabella.
# 2) VELOCE:
Ogni volta che eliminiamo una riga, viene eliminato anche l'indice corrispondente. Recuperare lo spazio al momento dell'esecuzione dell'istruzione DELETE consuma il tempo del processore. Se si utilizza la parola chiave QUICK, lo spazio dell'indice corrispondente rimane inutilizzato e può essere utilizzato quando vengono inseriti nuovi record che soddisfano l'intervallo di indice che è stato eliminato in precedenza.
Per esempio, si consideri una tabella dei dipendenti in cui l'ID del dipendente è l'indice. Ogni volta che un dipendente lascia un'organizzazione, è necessario eliminare il record corrispondente. Se usiamo la clausola QUICK, lo spazio dell'indice corrispondente rimarrà inutilizzato.
Quando un nuovo dipendente si unisce, riceverà un nuovo numero di dipendente e non lo stesso numero della persona che ha lasciato. In questi esempi, non è consigliabile utilizzare QUICK.
MYSQL DELETE Esempio
Di seguito è riportata una tabella di esempio creata in MYSQL.
Nome schema: Pacifico
Nome tabella: dipendenti
Nomi delle colonne:
empNum; Contiene valori interi per il numero del dipendente.
cognome: Contiene i valori varchar per il cognome del dipendente.
nome di battesimo: Contiene i valori varchar per il nome del dipendente.
e-mail: Contiene i valori varchar per l'ID e-mail del dipendente.
deptNum; Contiene varchar per l'ID reparto a cui appartiene un dipendente.
stipendio: Contiene i valori decimali dello stipendio di ciascun dipendente.
data d'inizio: Contiene i valori della data per la data di adesione del dipendente.
Nome schema: Pacifico
Nome tabella: dipendenti_history
Nomi delle colonne:
empNum; Contiene i valori interi per il numero del dipendente.
cognome: Contiene i valori varchar per il cognome del dipendente.
nome di battesimo: Contiene i valori varchar per il nome del dipendente.
e-mail: Contiene i valori varchar per l'ID e-mail del dipendente.
deptNum; Contiene varchar per l'ID reparto a cui appartiene un dipendente.
stipendio: Contiene i valori decimali dello stipendio di ciascun dipendente.
data d'inizio: Contiene i valori di data per la data di adesione del dipendente.
Nome schema: Pacifico
Nome tabella: dipartimenti
Nomi delle colonne:
deptNum; Contiene varchar per l'ID reparto all'interno di un'organizzazione.
città: Contiene il nome della città da cui lavorano i dipartimenti.
nazione: Contiene il nome del paese corrispondente alla città.
bonus: Contiene il valore percentuale del bonus.
MySQL Elimina riga singola
Il primo e più semplice modo per eliminare i record dalla tabella è l'eliminazione dei record uno per uno, utilizzando una clausola WHERE molto forte che garantisce l'eliminazione di un solo record adatto. Questo potrebbe essere ulteriormente utilizzato per eliminare un insieme di tipi simili di righe dalla tabella.
Esaminiamo in dettaglio l'istruzione delete e la sua esecuzione.
Qui proveremo a rimuovere un dipendente di nome 'Chris Nolan' con il numero del dipendente 1013.
Come illustrato nella figura sopra, l'istruzione DELETE è stata eseguita correttamente ed è stata eliminata una riga dalla tabella del dipendente.
Il produzione L'istruzione seguente mostra l'ora in cui l'istruzione è stata eseguita, l'istruzione MySQL che è stata eseguita e il numero di righe interessate.
Per favore, sii molto sicuro della clausola WHERE qui. Se la clausola WHERE non è corretta o se si perde una clausola WHERE, potrebbe verificarsi una perdita di dati. Per evitare tali situazioni, in produzione, è prevista la pratica di backup o scaricamenti periodici dei dati.
Per verificare l'output di questa istruzione DELETE, eseguiamo l'istruzione SELECT su questa tabella con empNum come 1013.
I risultati dell'output mostrano il valore NULL per tutte le colonne, il che implica che non esiste alcun record per tale empNum. L'output della query seguente mostra che sono state restituite 0 righe, il che implica che il record è stato cancellato dall'esecuzione dell'istruzione DELETE sopra.
Query:
DELETE FROM employees WHERE empNum = 1013 ;
Istantanea della tabella dopo:
empNum | cognome | nome di battesimo | deptNum | Stipendio | |
---|---|---|---|---|---|
7 | Questo è relativamente lento rispetto a TRUNCATE, se confrontato per l'eliminazione di interi dati dalla tabella. | Questo è relativamente più veloce di DELETE, se confrontato per l'eliminazione di interi dati dalla tabella. | |||
NULLO | NULLO | NULLO | NULLO | NULLO | NULLO |
MySQL DELETE utilizzando la clausola ORDER BY e LIMIT
ORDER BY e LIMIT sono due clausole che abbiamo discusso sopra. Il primo aiuta a decidere l'ordine in cui i record devono essere eliminati, eliminare i record con empNum in ordine crescente o eliminare i record con lo stipendio in ordine decrescente. Quest'ultimo aiuta a limitare il numero di record che questa transazione può eliminare.
Per esempio, se vogliamo eliminare solo 2 dipendenti appartenenti al reparto numero 4, che percepiscono uno stipendio elevato. Poi ci sono tre parti di questa query.
- Primo, dobbiamo eliminare i dipendenti dal reparto numero 4. Questo sarà gestito da una clausola WHERE.
- Il prossimo, abbiamo bisogno di eliminare i dipendenti che guadagnano salari elevati. Questo sarà gestito dalla clausola ORDER BY nella colonna dello stipendio in ordine decrescente.
- Da ultimo, dobbiamo eliminare solo due dipendenti. Questo sarà gestito dalla clausola LIMIT.
Diamo un'occhiata alla query DELETE e vediamo i risultati. Prima di farlo, identifichiamo innanzitutto quali sono i record esatti che vogliamo eliminare. Useremo le condizioni di cui sopra con un'istruzione SELECT per ottenere i record che vogliamo eliminare e successivamente eseguiremo la stessa query per verificare se quei record sono stati eliminati o meno.
Nella query SELECT sopra, abbiamo soddisfatto tutte e tre le condizioni di cui abbiamo parlato sopra utilizzando la clausola WHERE, ORDER BY e LIMIT. La query ci ha fornito 2 record, uno con empNum 1010 e un altro con 1007. Ora eseguiremo la query DELETE per assicurarci che questi due record vengano eliminati.
Come illustrato nella figura sopra, l'istruzione DELETE è stata eseguita correttamente ed ha eliminato due righe dalla tabella del dipendente. Il produzione L'istruzione seguente mostra l'ora in cui l'istruzione è stata eseguita, l'istruzione MySQL che è stata eseguita e il numero di righe interessate.
Per verificare l'output di questa istruzione DELETE, eseguiamo SELECT per empNum 1010 e 1007. Non è possibile utilizzare la stessa query SELECT utilizzata sopra poiché mostrerebbe gli altri dipendenti sotto deptNum 4.
c ++ domande pratiche e risposte pdf
I risultati dell'output mostrano il valore NULL per tutte le colonne, il che implica che non esiste alcun record per tali numeri di dipendenti. Il Produzione della query seguente mostra che sono state restituite 0 righe, il che implica che il record è stato cancellato dall'esecuzione dell'istruzione DELETE sopra.
Query:
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
Istantanea della tabella dopo:
empNum | cognome | nome di battesimo | deptNum | Stipendio | |
---|---|---|---|---|---|
NULLO | NULLO | NULLO | NULLO | NULLO | NULLO |
MySQL DELETE utilizzando la clausola Select
Successivamente, esamineremo l'utilizzo della clausola SELECT durante l'eliminazione dei record da una tabella.
Considera il seguente scenario:
Abbiamo due serie di tabelle: dipendenti e reparti. deptNum è come una chiave primaria nella tabella del dipartimento e una chiave esterna nella tabella del dipendente. Ciò significa che se a un dipendente viene assegnato un reparto, questo deve provenire da uno dei reparti nella tabella dei reparti.
Ora dobbiamo eliminare quei record dalla tabella del reparto in cui nessun dipendente è stato assegnato finora. Possiamo farlo avendo una clausola SELECT nella sottoquery di una query DELETE.
Per prima cosa identifichiamo i record che vogliamo eliminare:
La query SELECT precedente ha una sottoquery.
Il funzionamento della query è il seguente:
La query estrae tutti i record dalla tabella del reparto in cui deptNum non esiste nella tabella del dipendente. L'unione viene eseguita nella sottoquery sul deptNum delle due tabelle.
Ora eseguiamo la query DELETE e vediamo se possiamo eliminare questi due record dalla tabella del dipartimento poiché nessun dipendente è assegnato a questi reparti.
Come illustrato nella figura sopra, l'istruzione delete ha eliminato 2 righe dalle tabelle di reparto a cui non è stato assegnato alcun dipendente.
Per verificare l'output di questa istruzione DELETE, eseguiamo SELECT sulla tabella e vediamo cosa abbiamo nell'output.
Il messaggio di output della query di verifica precedente dice '0 righe restituite'. Ciò implica che le righe con deptNum 6 e 7 vengono eliminate. L'output non mostra inoltre alcun record invece di mostrare valori NULL poiché i record sono stati eliminati.
Query:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
MySQL ELIMINA interi dati dalla tabella
Successivamente, esamineremo lo scenario in cui dobbiamo eliminare tutte le righe o i record da una tabella.
Nella situazione di produzione, potresti non incontrare mai una situazione del genere. Ma questo genere di cose sarebbe richiesto nell'area di sviluppo in cui devi testare il tuo codice con più scenari diversi e potresti voler ricreare un nuovo set di dati di test eliminando i record esistenti nella tabella.
Per prima cosa, diamo un'occhiata ai dati che intendiamo eliminare. Tenteremo di eliminare i dati dalla tabella Employee_history.
Di seguito sono riportati i dati attualmente esistenti nella tabella.
Qui abbiamo 18 righe nella tabella Employees_history. Ora andiamo avanti ed eliminiamo tutti questi in un'unica transazione. La query è quasi simile a quella che abbiamo discusso nella prima sezione. L'unico cambiamento è che dobbiamo rimuovere la clausola WHERE dalla query in modo che non ci siano restrizioni sul numero di righe che vogliamo eliminare.
Come illustrato nell'immagine sopra, l'istruzione delete è stata eseguita correttamente e ha eliminato tutte le 18 righe dalla tabella Employee_history. L'istruzione di output seguente mostra l'ora in cui l'istruzione è stata eseguita, l'istruzione MySQL che è stata eseguita e il numero di righe interessate.
Per verificare l'output di questa istruzione DELETE, eseguiamo SELECT sulla tabella e vediamo cosa abbiamo nell'output.
I risultati dell'output mostrano il valore NULL per tutte le colonne, il che implica che non esiste alcun record per tali numeri di dipendenti. L'output della query seguente mostra che sono state restituite 0 righe, il che implica che tutti i record sono stati eliminati dall'esecuzione dell'istruzione DELETE precedente.
Query:
DELETE FROM employees_history ;
Istantanea della tabella dopo:
empNum | cognome | nome di battesimo | deptNum | Stipendio | |
---|---|---|---|---|---|
NULLO | NULLO | NULLO | NULLO | NULLO | NULLO |
MySQL CANCELLA l'intera tabella
Ora, esamineremo lo scenario in cui dobbiamo eliminare la tabella stessa. In termini SQL, lo chiamiamo DROP the table. Non importa se la tabella contiene dati o meno. Farà semplicemente cadere la tabella insieme ai dati, se presenti.
Nella sezione precedente, abbiamo eliminato i dati dalla tabella Employee_history. In questa sezione, elimineremo la tabella Employee_history stessa.
Di seguito è riportato il comando insieme al suo output:
Come illustrato nell'immagine sopra, l'istruzione DROP è stata eseguita con successo e ha cancellato la tabella employee_history dal catalogo di sistema del database MySQL.
Se dai un'occhiata al messaggio, mostrerà '0 righe interessate'. Questo perché avevamo cancellato tutte le 18 righe nella sezione precedente. Se questa tabella avesse delle righe, quel numero di righe sarebbe interessato, il che implica l'eliminazione.
Per verificare l'output di questa istruzione DROP, eseguiamo SELECT sulla tabella e vediamo cosa abbiamo nell'output.
Il messaggio di output della query di verifica precedente dice che la tabella non esiste. Ciò convalida la nostra esecuzione dell'istruzione DROP sopra per eliminare la tabella.
Query:
DROP TABLE employees_history ;
Comando di troncamento di MySQL
Abbiamo già discusso dell'eliminazione di tutti i record dalla tabella utilizzando il comando DELETE. Lo stesso potrebbe essere ottenuto utilizzando anche l'istruzione TRUNCATE.
Per questo esempio, creiamo nuovamente la tabella Employee_history e la ricompiliamo con i dati. T Di seguito sono riportate le due query che sono state eseguite per ricreare la tabella e ripopolarla:
Query:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
Ecco come appare ora la tabella Employees_history con i dati.
Successivamente, rimuoveremo tutti i record da questa tabella utilizzando l'istruzione TRUNCATE.
Come mostrato nell'immagine, la query viene eseguita correttamente. Se osservi attentamente la parte 'Messaggio', scoprirai che dice '0 righe interessate'. Tuttavia, sappiamo che questa tabella contiene 15 righe. Allora come mai gli spettacoli sono zero?
Motivo: L'istruzione Truncate non si preoccupa di prendere un conteggio del numero di righe interessate dalla sua esecuzione. Svuota semplicemente il tavolo. Questa è una delle differenze significative tra le istruzioni DELETE e TRUNCATE.
Verifichiamo l'esecuzione dell'istruzione TRUNCATE eseguendo una query SELECT sulla tabella Employee_history.
Come mostrato nell'immagine sopra, la query non ha restituito righe e anche tutte le colonne mostrano valori NULL, il che implica che l'istruzione TRUNCATE che abbiamo eseguito in precedenza ha cancellato tutti i record dalla tabella.
Query:
TRUNCATE TABLE employees_history ;
Differenza tra istruzioni TRUNCATE e DELETE
Mr. No | ELIMINA | TRONCARE |
---|---|---|
1 | È un DML (Data Manipulation Language). | È un DDL (Data Definition Language). |
Due | Qualsiasi trigger AFTER DELETE sulla tabella viene attivato quando usiamo il comando DELETE. | Nessun trigger AFTER DELETE sulla tabella viene attivato quando si utilizza il comando TRUNCATE. |
3 | Un record può essere eliminato anche se sono presenti vincoli di chiave esterna. | I record della tabella non possono essere troncati se sono presenti vincoli di chiave esterna. |
4 | La reinizializzazione della tabella non verrà eseguita. | La tabella verrà reinizializzata. |
5 | La clausola WHERE può essere utilizzata. | La clausola WHERE non può essere utilizzata. |
6 | Ciò elimina un record alla volta e tiene traccia del numero totale di record eliminati nei registri. | Elimina tutti i record contemporaneamente e non tiene traccia del numero di record eliminati. |
Integrità referenziale e suo impatto su DELETE
Prima di essere, vediamo che cos'è l'integrità referenziale o il RI o i vincoli di chiave esterna?
I vincoli di chiave esterna riguardano lo stabilire una relazione o un collegamento tra la tabella padre e la tabella figlia. Ciò aiuta a incrociare i dati tra le tabelle collegate tra loro. Una tabella padre può avere più tabelle figlio e viceversa.
Per esempio, le due tabelle di cui abbiamo discusso finora, ovvero dipendenti e reparti, sono collegate tra loro utilizzando un vincolo di chiave esterna. Questo vincolo viene stabilito creando una colonna, di solito la chiave primaria, come colonna chiave che collega due tabelle.
La colonna deptNum nella tabella del dipartimento è stata collegata alla colonna deptNum nella tabella del dipendente. In questo caso, i reparti sono la tabella padre e i dipendenti la tabella figlio.
Ma come influisce questo sulle istruzioni DELETE?
In MySQL o in qualsiasi database, ci sono determinati scenari da gestire durante l'eliminazione dei record dalle tabelle padre o figlio.
Ci sono più opzioni di riferimento che possiamo discutere:
# 1) IN ELIMINA CASCATA: La regola dice che non possiamo rimuovere una riga dalla tabella genitore se ha dei riferimenti o ha una riga corrispondente in una qualsiasi delle tabelle figlie. Tuttavia, se una tabella padre ha parecchie tabelle figlie, è un compito noioso rimuovere prima i record da ogni tabella figlia e poi dalla tabella padre.
Per questo, esiste una soluzione alternativa chiamata ON DELETE CASCADE. Questa è una clausola che viene aggiunta all'istruzione CREATE di ciascuna delle tabelle figlio. Quindi, ogni volta che diciamo di eliminare una riga dalla tabella padre, il motore MySQL identifica prima i riferimenti di quella riga nelle tabelle figlie e rimuove quei record e alla fine cancella il record dalla tabella genitore.
# 2) NESSUNA AZIONE: Questa è un'opzione predefinita. Se l'esecuzione di un'istruzione DELETE tenta di eliminare un record che ha riferimenti in una qualsiasi delle tabelle figlie, con questa opzione l'esecuzione dell'istruzione si interromperà e il Transazione MySQL verrà riportato all'ultimo punto di commit.
# 3) RESTRIZIONI: Il funzionamento di RESTRICT e NO ACTION è lo stesso. Fermerà l'esecuzione ed emetterà un rollback.
# 4) SET NULL: Se l'esecuzione di un'istruzione di eliminazione tenta di eliminare un record che ha riferimenti in una qualsiasi delle tabelle secondarie, questa opzione aggiornerà il valore della colonna in tutte le tabelle secondarie come NULL e una volta fatto, eliminerà il record dal padre tavolo.
# 5) SET DEFAULT: Se l'esecuzione di un'istruzione DELETE tenta di eliminare un record che ha riferimenti in una qualsiasi delle tabelle figlie, questa opzione aggiornerà i valori della colonna al valore predefinito come definito nell'istruzione CREATE della tabella.
Domande e risposte frequenti
Q # 1) Come eliminare i dati dalla tabella in MySQL?
Risposta: Di seguito viene fornita la sintassi del comando di eliminazione per eliminare solo una riga di dati selezionata.
DELETE FROM table_name WHERE condition;
D # 2) Come eliminare tutti i dati dalla tabella in MySQL?
Risposta: La sintassi del comando DELETE per eliminare tutte le righe dalla tabella è:
DELETE * FROM table_name;
D # 3) Come eliminare la tabella dal database in MySQL?
Risposta: Il comando drop può essere utilizzato per eliminare la tabella dal database. L'utente può sostituire il nome_tabella con la tabella che deve essere eliminata.
DROP TABLE table_name;
Q # 4) Come eliminare il database in MySQL?
Risposta: Il comando drop può essere utilizzato per eliminare il database.
DROP Database db_name;
Gli utenti possono sostituire il nome_db con il nome del database che deve essere eliminato.
D # 5) Cos'è ON DELETE CASCADE in MySQL?
Risposta: Quando il record padre viene eliminato, ON DELETE CASCADE crea un record figlio corrispondente da eliminare. Pertanto, l'effetto della cancellazione viene trasferito dal genitore al figlio. Ciò può essere utile per eseguire l'eliminazione di più tabelle.
Q # 6) Perché TRUNCATE è considerato come un'istruzione DDL?
Risposta: L'istruzione TRUNCATE effettivamente elimina e ricrea la tabella insieme ai metadati della tabella. Quindi, è un'istruzione DDL.
D # 7) È possibile annullare TRUNCATE?
Risposta: No, TRUNCATE è un'istruzione di commit automatico se eseguita autonomamente. Ciò significa che non può essere annullato poiché anche il commit viene eseguito insieme ad esso. Ma se fa parte di una transazione, può essere ripristinato utilizzando i file di registro SQL.
D # 8) È possibile eseguire il rollback delle istruzioni DELETE?
Risposta: Sì, le istruzioni DELETE possono essere ripristinate. Esegui semplicemente il comando ROLLBACK prima di eseguire COMMIT.
c ++ domande di codifica dell'intervista
D # 9) È possibile eliminare una colonna utilizzando il comando DELETE?
Risposta: L'aggiunta o l'eliminazione di colonne sono comandi DDL. Un'istruzione ALTER dovrebbe essere utilizzata per DROP una colonna dalla tabella.
Conclusione
In questo tutorial, abbiamo imparato diversi modi di eseguire le istruzioni DELETE in MySQL.
In poche parole, abbiamo visto:
- MySQL Elimina riga singola
- Eliminazione di MySQL utilizzando ORDER BY e la clausola limite
- Eliminazione di MySQL utilizzando la clausola Select
- MySQL Elimina l'intera tabella
- MySQL Truncate
- Differenza tra le istruzioni TRUNCATE e DELETE
- Integrità referenziale e suo impatto su DELETE
Possiamo utilizzare uno dei precedenti, in base al requisito.
Buona lettura!!
Lettura consigliata
- Sintassi dei comandi Cat Unix, opzioni con esempi
- Comando di ordinamento Unix con sintassi, opzioni ed esempi
- MySQL Insert Into Table - Inserisci sintassi ed esempi di istruzioni
- MongoDB Aggiorna ed elimina documento con esempi
- Comando Taglia in Unix con esempi
- Operatori Nuovo / Elimina in C ++ con esempi
- Tutorial sull'istruzione di aggiornamento di MySQL: sintassi ed esempi delle query di aggiornamento
- Comando Ls in Unix con esempi