mysql delete statement delete command syntax
Aquest tutorial explica com s'utilitza la declaració DELETE de MySQL per suprimir dades d'una taula o eliminar tota la taula i la diferència entre els ordres de truncar i suprimir:
A MySQL, DELETE és un llenguatge de manipulació de dades o DML, com ja sabem.
Com el propi nom indica, l'ordre s'utilitza per eliminar files de la taula. Mitjançant aquesta ordre, podem eliminar una o més files no desitjades en una sola transacció. Hi ha diverses maneres de suprimir registres d'una taula mitjançant l'ordre SUPRIMIR.
coses interessants que podeu fer amb c ++
En aquest tutorial, parlarem de tot això en detall juntament amb exemples senzills.
Què aprendreu:
- Ordre MySQL DELETE
- Diferència entre les declaracions TRUNCATE i DELETE
- Integritat referencial i el seu impacte a DELETE
- Preguntes i respostes freqüents
- Conclusió
Ordre MySQL DELETE
Hi ha un factor important a tenir en compte abans de continuar endavant. Mai es pot recuperar cap fila o diverses files que suprimim amb l’ordre DELETE.
Per tant, per evitar situacions en què s’elimina una fila per error, és recomanable fer una còpia de seguretat de la taula abans d’executar la instrucció DELETE. Més endavant podem utilitzar aquesta còpia de seguretat per restaurar la taula en cas d’error.
Nota: Estem utilitzant la versió 8.0 de MySQL. Podeu descarregar-lo des de aquí .
Sintaxi d'eliminació de MySQL:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
Sintaxi Explicació:
- La sintaxi comença amb la paraula clau 'ELIMINA DE' i, per tant, informa al servidor MySQL sobre el tipus d'activitat a realitzar. Aquesta és una paraula clau obligatòria i no es pot ometre.
- A continuació ve el nom de la taula en què s’ha de realitzar l’operació SUPRIMIR. Això també és obligatori i no es pot ometre. Aquí podem esmentar un o més noms de taules.
- A continuació, podem esmentar qualsevol condició que controli l’elegibilitat de les files a suprimir. Aquesta és una clàusula opcional. La paraula clau aquí és ON.
- Seguida de la clàusula WHERE es troba la clàusula ORDER BY, que aplica les files a suprimir en un ordre concret, ascendent o descendent, en una o més columnes. Aquesta és una clàusula opcional.
- La clàusula LIMIT segueix la clàusula ORDER BY. Posa un límit al nombre de files que la sentència DELETE pot eliminar de la taula.
Declaració de modificadors a DELETE
# 1) BAIX_PRIORITAT:
Aquest modificador informa al motor MySQL de retardar l'execució de la sentència DELETE fins a un moment en què no hi hagi connexions llegint de la taula des de la qual estem intentant BORRAR.
Això ajuda a aconseguir la coherència de totes les altres operacions que es realitzaran en aquesta taula. Això també ajuda a evitar problemes de bloqueig de taula.
# 2) RÀPID:
Sempre que suprimim una fila, també s’elimina l’índex corresponent. Recuperar l’espai en el moment d’executar la instrucció DELETE consumeix el temps del processador. Si fem servir la paraula clau QUICK, l’espai de l’índex corresponent no s’utilitzarà i es podrà utilitzar quan s’insereixin nous registres que s’adaptin a l’interval d’índex que s’ha suprimit anteriorment.
Per exemple, tingueu en compte una taula d'empleats on l'identificador d'empleat és l'índex. Sempre que un empleat deixa una organització, hem de suprimir el registre corresponent. Si fem servir la clàusula QUICK, l’espai d’índex corresponent quedarà inutilitzat.
Quan s'incorpori un nou empleat, obtindrà un número d'empleat nou i no el mateix de la persona que va marxar. En aquests exemples, no és recomanable utilitzar QUICK.
Exemple MYSQL DELETE
A continuació es mostra una taula de mostra creada a MYSQL.
Nom de l'esquema: pacífic
Nom de la taula: empleats
Noms de columna:
empNum; Manté valors enters per al número d'empleat.
cognom: Manté els valors varchar del cognom de l’empleat.
nom: Manté els valors varchar per al nom de l’empleat.
correu electrònic: Conté valors varchar per a l'identificador de correu electrònic de l'empleat.
deptNum; Manté el registre de identificació del departament al qual pertany un empleat.
sou: Conté valors decimals del salari de cada empleat.
Data d'inici: Manté els valors de data per a la data d’incorporació de l’empleat.
Nom de l'esquema: pacífic
Nom de la taula: història_empleats
Noms de columna:
empNum; Manté els valors enters del nombre d'empleats.
cognom: Manté els valors varchar del cognom de l’empleat.
nom: Manté els valors varchar per al nom de l’empleat.
correu electrònic: Conté valors varchar per a l'identificador de correu electrònic de l'empleat.
deptNum; Manté el registre de identificació del departament al qual pertany un empleat.
sou: Conté valors decimals del salari de cada empleat.
Data d'inici: Manté els valors de data per a la data d’incorporació de l’empleat.
Nom de l'esquema: pacífic
Nom de la taula: departaments
Noms de columna:
deptNum; Manté el varchar per a la identificació del departament dins d'una organització.
ciutat: Manté el nom de la ciutat des d'on treballen els departaments.
país: Manté el nom del país corresponent a la ciutat.
bonificació: Manté el valor percentual de la bonificació.
MySQL Suprimeix una fila
La primera manera més senzilla d’eliminar registres de la taula eliminant els registres un per un, mitjançant una clàusula WHERE molt forta que garanteix que només se suprimeix un registre adequat. Això es podria utilitzar per eliminar un conjunt de tipus similars de files de la taula.
Anem a revisar en detall la declaració delete i la seva execució.
Aquí intentarem eliminar un empleat anomenat 'Chris Nolan' amb el número d'empleat com a 1013.
Tal com es mostra a la imatge superior, la instrucció DELETE s’ha executat correctament i s’ha suprimit una fila de la taula de l’empleat.
El sortida La sentència següent mostra l'hora en què s'ha executat la sentència, la sentència MySQL que s'ha executat i el nombre de files afectades.
Estigueu molt segurs de la clàusula WHERE aquí. Si la clàusula WHERE és incorrecta o si es perd una clàusula WHERE, pot provocar la pèrdua de dades. Per evitar aquestes situacions, a la producció hi ha una pràctica de còpies de seguretat o descàrregues periòdiques de dades.
Per tal de verificar la sortida d’aquesta sentència DELETE, executem la sentència SELECT en aquesta taula amb l’empNum com a 1013.
Els resultats de sortida mostren un valor NULL per a totes les columnes, el que implica que no existeix cap registre per a aquest empNum. La sortida de la consulta següent mostra que s'han retornat 0 files, cosa que implica que el registre s'ha suprimit mitjançant l'execució de la sentència DELETE anterior.
Consulta:
DELETE FROM employees WHERE empNum = 1013 ;
Instantània de la taula després:
empNum | cognom | nom | correu electrònic | deptNum | Sou |
---|---|---|---|---|---|
7 | Això és relativament lent que TRUNCATE, quan es compara per suprimir dades senceres de la taula. | Això és relativament més ràpid que DELETE, quan es compara per suprimir dades senceres de la taula. | |||
NUL | NUL | NUL | NUL | NUL | NUL |
MySQL DELETE mitjançant clàusula ORDER BY I LIMIT
ORDER BY i LIMIT són dues clàusules que hem comentat anteriorment. El primer ajuda a decidir l'ordre en què s'han de purgar els registres, ja sigui eliminar els registres amb empNum ascendent o eliminar els registres amb el salari en ordre descendent. Aquest últim ajuda a restringir el nombre de registres que pot eliminar aquesta transacció.
Per exemple, si volem eliminar només 2 empleats que pertanyen al departament número 4, que tenen assalariats elevats. A continuació, hi ha tres parts d'aquesta consulta.
- Primer, hem de purgar els empleats del departament número 4. Això es gestionarà mitjançant una clàusula WHERE.
- Pròxim, hem de purgar els empleats que cobren salaris elevats. Això es gestionarà mitjançant la clàusula ORDER BY de la columna salarial en ordre descendent.
- Per últim, només hem de purgar dos empleats. Això es gestionarà mitjançant la clàusula LIMIT.
Fem una ullada a la consulta DELETE i vegem els resultats. Abans de fer-ho, primer identifiquem quins són els registres exactes que volem suprimir. Utilitzarem les condicions anteriors amb una sentència SELECT per obtenir els registres que volem suprimir i posteriorment executarem la mateixa consulta per verificar si aquests registres s’han suprimit o no.
A la consulta SELECT anterior, hem complert les tres condicions que hem parlat anteriorment mitjançant la clàusula WHERE, ORDER BY i LIMIT. La consulta ens va proporcionar 2 registres, un amb empNum 1010 i un altre amb 1007. Ara, executarem la consulta SUPRIMA per assegurar-nos que se suprimeixen aquests dos registres.
Tal com es mostra a la imatge superior, la instrucció DELETE s'ha executat correctament i ha suprimit dues files de la taula de l'empleat. El sortida La sentència següent mostra l'hora en què s'ha executat la sentència, la sentència MySQL que s'ha executat i el nombre de files afectades.
Per tal de verificar la sortida d’aquesta sentència DELETE, executem el SELECT per a empNum 1010 i 1007. No podem utilitzar la mateixa consulta SELECT que es va fer servir anteriorment, com la que es mostraria als altres empleats de deptNum 4.
Els resultats de sortida mostren un valor NULL per a totes les columnes, el que implica que no existeix cap registre per a aquests números d'empleats. El Sortida de la consulta següent mostra que s'han retornat 0 files, cosa que implica que el registre s'ha suprimit mitjançant l'execució de la sentència DELETE anterior.
Consulta:
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
Instantània de la taula després:
empNum | cognom | nom | correu electrònic | deptNum | Sou |
---|---|---|---|---|---|
NUL | NUL | NUL | NUL | NUL | NUL |
MySQL DELETE mitjançant clàusula de selecció
A continuació, passarem a l’ús de la clàusula SELECT mentre suprimim els registres d’una taula.
Penseu en el següent escenari:
Tenim dos conjunts de taules: empleats i departaments. deptNum és com una clau principal a la taula del departament i una clau estrangera a la taula de l’empleat. Això vol dir que si a un empleat se li assigna un departament, ha de ser d’un dels departaments de la taula dels departaments.
Ara, hem de suprimir aquells registres de la taula del departament on fins ara no s’ha assignat cap empleat. Ho podem fer tenint una clàusula SELECT a la subconsulta d’una consulta DELETE.
Primer identifiquem els registres que volem suprimir:
La consulta SELECT anterior té una subconsulta.
El funcionament de la consulta és el següent:
La consulta treu tots els registres de la taula del departament on el deptNum no existeix a la taula de l’empleat. La combinació es realitza a la subconsulta del deptNum de les dues taules.
Ara executem la consulta DELETE i comprovem si podem eliminar aquests dos registres de la taula del departament, ja que no hi ha cap empleat assignat a aquests departaments.
quin és el millor convertidor de youtube a mp3?
Tal com es mostra a la imatge anterior, la declaració delete ha suprimit 2 files de les taules de departaments que no tenen assignat cap empleat.
Per tal de verificar la sortida d’aquesta sentència DELETE, executem SELECT a la taula i veiem què tenim a la sortida.
El missatge de sortida de la consulta de verificació anterior diu 'S'han retornat 0 files'. Això implica que se suprimeixen les files amb deptNum 6 i 7. La sortida tampoc mostra registres en lloc de mostrar valors NULS ja que els registres s’han suprimit.
Consulta:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
MySQL DELETE Dades senceres de la taula
A continuació, veurem l’escenari en què hem de suprimir totes les files o registres d’una taula.
En la situació de producció, mai no us trobareu amb aquesta situació. Però aquest tipus de coses serien necessàries a l’àrea de desenvolupament on haureu de provar el vostre codi amb diversos escenaris diferents i és possible que vulgueu tornar a crear un conjunt nou de dades de prova suprimint els registres existents a la taula.
En primer lloc, fem una ullada a les dades que pretenem suprimir. Intentarem suprimir les dades de la taula employ_history.
A continuació es mostren les dades existents actualment a la taula.
Aquí tenim 18 files a la taula empleats_història. Anem ara i suprimeix-los en una sola transacció. La consulta és gairebé similar a la que hem comentat a la primera secció. L’únic canvi és que hem d’eliminar la clàusula WHERE de la consulta per tal que no hi hagi cap restricció sobre el nombre de files que volem suprimir.
Tal com es mostra a la imatge anterior, la sentència delete s'ha executat amb èxit i ha suprimit totes les 18 files de la taula employ_history. La sentència de sortida següent mostra l'hora en què s'ha executat la sentència, la sentència MySQL que s'ha executat i el nombre de files afectades.
Per tal de verificar la sortida d’aquesta sentència DELETE, executem SELECT a la taula i veiem què tenim a la sortida.
Els resultats de sortida mostren un valor NULL per a totes les columnes, el que implica que no existeix cap registre per a aquests números d'empleats. La sortida de la consulta següent mostra que s'han retornat 0 files, cosa que implica que tots els registres s'han suprimit mitjançant l'execució de la sentència DELETE anterior.
Consulta:
DELETE FROM employees_history ;
Instantània de la taula després:
empNum | cognom | nom | correu electrònic | deptNum | Sou |
---|---|---|---|---|---|
NUL | NUL | NUL | NUL | NUL | NUL |
MySQL DELETE Taula sencera
Ara veurem l’escenari en què hem de suprimir la taula en si. En termes SQL, l'anomenem DROP la taula. Tant se val si la taula té dades o no. Simplement deixarà anar la taula junt amb les dades, si n’hi ha.
A la secció anterior, hem suprimit les dades de la taula empleats_història. En aquesta secció, deixarem caure la pròpia taula de la història dels empleats.
A continuació es mostra l'ordre juntament amb la seva sortida:
Tal com es mostra a la imatge anterior, la instrucció DROP s'ha executat amb èxit i ha suprimit la taula employ_history del catàleg del sistema de la base de dades MySQL.
Si mireu el missatge, es mostrarà '0 files afectades'. Això es deu al fet que havíem suprimit les 18 files de la secció anterior. Si aquesta taula tingués files, es veuria afectat el nombre de files, cosa que implica la supressió.
Per tal de verificar la sortida d’aquesta sentència DROP, executem SELECT a la taula i veiem què tenim a la sortida.
El missatge de sortida de la consulta de verificació anterior indica que la taula no existeix. Això valida la nostra execució de la sentència DROP anterior per deixar caure la taula.
Consulta:
DROP TABLE employees_history ;
Ordre Truncar MySQL
Ja hem parlat de la supressió de tots els registres de la taula mitjançant l'ordre DELETE. El mateix es podria aconseguir utilitzant també la instrucció TRUNCATE.
Per a aquest exemple, tornem a crear la taula employ_history i omplim-la de dades. T A continuació es detallen les dues consultes que s'han executat per recrear la taula i tornar-la a omplir:
Consulta:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
Així es veu ara la taula employ_history amb les dades.
A continuació, eliminarem tots els registres d'aquesta taula mitjançant la instrucció TRUNCATE.
Com es mostra a la imatge, la consulta s’executa correctament. Si mireu de prop la part 'Missatge', trobareu que diu '0 files afectades'. Tot i això, sabem que aquesta taula inclou 15 files. Llavors, com és que els espectacles són zero?
Motiu: A la declaració Truncate no li importa comptar el nombre de files que es veuen afectades per la seva execució. Simplement buida la taula. Aquesta és una de les diferències significatives entre les instruccions DELETE i TRUNCATE.
Verifiquem l'execució de la sentència TRUNCATE executant una consulta SELECT a la taula empleats_història.
per què és c ++ millor que Java
Com es mostra a la imatge superior, la consulta no ha retornat cap fila i també totes les columnes mostren valors NULS, el que implica que la sentència TRUNCATE que hem executat anteriorment ha suprimit tots els registres de la taula.
Consulta:
TRUNCATE TABLE employees_history ;
Diferència entre les declaracions TRUNCATE i DELETE
Sr. No | ESBORRAR | TRONCAR |
---|---|---|
1 | Es tracta d’un DML (Data Manipulation Language). | És un DDL (Data Definition Language). |
2 | Qualsevol activador DESPRÉS DELETE a la taula s'activa quan fem servir l'ordre DELETE. | No s'activa cap activador DESPRÉS DELETE quan s'utilitza l'ordre TRUNCATE. |
3 | Es pot suprimir un registre fins i tot si hi ha restriccions de claus externes. | Els registres de la taula no es poden truncar si hi ha restriccions de claus externes. |
4 | La reinicialització de la taula no es produirà. | Es tornarà a inicialitzar la taula. |
5 | Es pot utilitzar la clàusula WHERE. | La clàusula WHERE no es pot utilitzar. |
6 | Se suprimeix un registre a la vegada i es fa un seguiment del nombre total de registres suprimits als registres. | Es purga tots els registres alhora i no es fa un seguiment del nombre de registres suprimits. |
Integritat referencial i el seu impacte a DELETE
Abans de ser, a veure què és la integritat referencial o RI o restriccions de clau estrangera?
Les restriccions de claus estrangeres consisteixen a establir una relació o vincle entre la taula dels pares i la del fill. Això ajuda a fer referències creuades a les taules que estan enllaçades entre si. Una taula pare pot tenir diverses taules filles i viceversa.
Per exemple, les dues taules que hem estat discutint fins ara, és a dir, empleats i departaments, estan vinculades entre si mitjançant una restricció de clau estrangera. Aquesta restricció s’estableix fent una columna, generalment la clau primària, com a columna clau que enllaça dues taules.
La columna deptNum de la taula del departament s’ha enllaçat a la columna deptNum de la taula de l’empleat. En aquest cas, els departaments són la taula principal i els empleats la taula secundària.
Però, com afecta això a les declaracions DELETE?
A MySQL o en qualsevol base de dades, hi ha certs escenaris que s’han de gestionar mentre se suprimeixen els registres de les taules pare o fill.
Hi ha diverses opcions de referència que podem parlar:
# 1) EN ELIMINAR CASCADA: La regla diu que no podem eliminar una fila de la taula principal si té referències o té una fila corresponent en alguna de les taules fill. Tanmateix, si una taula pare té moltes taules filles, és una tasca tediós eliminar primer els registres de totes i cadascuna de les taules fill i després de la taula principal.
Per a això, hi ha una solució alternativa anomenada ON DELETE CASCADE. Aquesta és una clàusula que s’afegeix a la sentència CREATE de cadascuna de les taules filles. Per tant, sempre que diem que esborra una fila de la taula principal, el motor MySQL primer identificaria les referències d’aquesta fila a les taules filles i eliminaria aquests registres i, finalment, suprimirà el registre de la taula principal.
# 2) SENSE ACCIÓ: Aquesta és una opció predeterminada. Si l'execució d'una sentència DELETE intenta suprimir un registre que tingui referències en alguna de les taules fill, llavors amb aquesta opció s'aturarà l'execució de la sentència i Transacció MySQL es tornarà al darrer punt de confirmació.
# 3) RESTRICTE: El funcionament de RESTRICT i NO ACTION és el mateix. S'aturarà l'execució i s'emetrà una recuperació.
# 4) SET NULL: Si l'execució d'una sentència delete intenta suprimir un registre que tingui referències en alguna de les taules fill, aquesta opció actualitzarà el valor de columna de totes les taules fill com a NULL i, un cop fet, se suprimirà el registre del pare taula.
# 5) SET DEFAULT: Si l'execució d'una sentència DELETE intenta suprimir un registre que tingui referències en alguna de les taules fill, aquesta opció actualitzarà els valors de les columnes al valor per defecte tal com es defineix a la sentència CREATE de la taula.
Preguntes i respostes freqüents
P # 1) Com esborrar dades de la taula de MySQL?
Resposta: A continuació es mostra la sintaxi de l’ordre delete per eliminar només una fila de dades seleccionada.
DELETE FROM table_name WHERE condition;
Q # 2) Com esborrar totes les dades de la taula de MySQL?
Resposta: La sintaxi de l'ordre DELETE per suprimir totes les files de la taula és:
DELETE * FROM table_name;
P # 3) Com esborrar la taula de la base de dades a MySQL?
Resposta: L'ordre drop es pot utilitzar per suprimir la taula de la base de dades. L'usuari pot substituir el nom_tabla per la taula que cal suprimir.
DROP TABLE table_name;
Q # 4) Com esborrar la base de dades a MySQL?
Resposta: L'ordre drop es pot utilitzar per suprimir la base de dades.
DROP Database db_name;
Els usuaris poden substituir db_name pel nom de la base de dades que cal suprimir.
P # 5) Què hi ha ON DELETE CASCADE a MySQL?
Resposta: Quan se suprimeix el registre pare, ON DELETE CASCADE crea un registre secundari coincident que s'ha de suprimir. Per tant, l’efecte de la supressió es fa en cascada del pare al fill. Això pot ser útil per a la supressió de diverses taules.
P # 6) Per què TRUNCATE es considera una sentència DDL?
Resposta: La sentència TRUNCATE cau i torna a crear la taula juntament amb les metadades de la taula. Per tant, és una declaració DDL.
P # 7) Es pot retrocedir TRUNCATE?
Resposta: No, TRUNCATE és una sentència de confirmació automàtica si s'executa de forma autònoma. Això significa que no es pot revertir, ja que la confirmació també s'executa junt amb ella. Però si forma part d’una transacció, es pot recuperar amb els fitxers de registre SQL.
Q # 8) Es poden recuperar les declaracions DELETE?
Resposta: Sí, les declaracions DELETE es poden recuperar. Només cal que executeu l'ordre ROLLBACK abans d'executar COMMIT.
P # 9) Es pot suprimir una columna mitjançant l'ordre DELETE?
Resposta: L'addició o supressió de columnes són ordres DDL. S'ha d'utilitzar una instrucció ALTER per CAURE una columna de la taula.
Conclusió
En aquest tutorial, hem après diferents maneres d'executar sentències DELETE a MySQL.
En poques paraules, vam veure:
- MySQL Suprimeix una fila
- Esborra MySQL mitjançant ORDER BY i clàusula límit
- Suprimir MySQL mitjançant una clàusula de selecció
- MySQL Suprimeix tota la taula
- MySQL Truncate
- Diferència entre les instruccions TRUNCATE i DELETE
- Integritat referencial i els seus impactes a SUPRIMIR
Podem utilitzar qualsevol de les opcions anteriors, en funció del requisit.
Bona lectura !!
Lectura recomanada
- Sintaxi d'ordres Unix Cat, opcions amb exemples
- Ordre d'ordenació Unix amb sintaxi, opcions i exemples
- MySQL Insereix a la taula: insereix sintaxi i exemples de sentències
- Actualitzeu i suprimiu el document amb exemples de MongoDB
- Talla l'ordre a Unix amb exemples
- Operadors nous / suprimits de C ++ amb exemples
- Tutorial de la declaració d'actualització de MySQL: actualització de sintaxi i exemples de consulta
- Ordre Ls a Unix amb exemples