mysql delete statement delete command syntax
Este tutorial explica cómo usar la instrucción DELETE de MySQL para eliminar datos de una tabla o eliminar toda la tabla y la diferencia entre los comandos Truncar y Eliminar:
En MySQL, DELETE es un lenguaje de manipulación de datos o DML, como sabemos.
Como sugiere el propio nombre, el comando se usa para eliminar filas de la tabla. Con este comando, podemos eliminar una o más filas no deseadas en una sola transacción. Hay varias formas de eliminar registros de una tabla usando el comando DELETE.
cómo inicializar la lista en java
En este tutorial, discutiremos todos estos en detalle junto con ejemplos simples.
Lo que vas a aprender:
- Comando DELETE de MySQL
- Diferencia entre declaraciones TRUNCATE y DELETE
- Integridad referencial y su impacto en DELETE
- Preguntas y respuestas frecuentes
- Conclusión
Comando DELETE de MySQL
Hay un factor importante a tener en cuenta antes de seguir adelante. Cualquier fila o varias filas que eliminemos usando el comando DELETE nunca se podrá recuperar.
Por lo tanto, para evitar escenarios en los que una fila se elimina por error, es recomendable realizar una copia de seguridad de la tabla antes de ejecutar la instrucción DELETE. Posteriormente, podemos utilizar esta copia de seguridad para restaurar la tabla en caso de errores.
Nota: Estamos usando MySQL versión 8.0. Puedes descargarlo desde aquí .
Sintaxis de eliminación de MySQL:
|_+_|Explicación de la sintaxis:
- La sintaxis comienza con la palabra clave “DELETE FROM”, informando así al servidor MySQL sobre el tipo de actividad a realizar. Esta es una palabra clave obligatoria y no se puede omitir.
- Luego viene el nombre de la tabla en la que se debe realizar la operación DELETE. Esto también es obligatorio y no se puede omitir. Podemos mencionar uno o más nombres de tablas aquí.
- A continuación, podemos mencionar cualquier condición que controle la elegibilidad de las filas a eliminar. Esta es una cláusula opcional. La palabra clave aquí es DÓNDE.
- Seguida de la cláusula WHERE está la cláusula ORDER BY, que obliga a que las filas se eliminen en un orden particular, ya sea ascendente o descendente, en una columna (s). Esta es una cláusula opcional.
- La cláusula LIMIT sigue a la cláusula ORDER BY. Establece un límite en el número de filas que la instrucción DELETE puede eliminar de la tabla.
Modificadores en la instrucción DELETE
# 1) LOW_PRIORITY:
Este modificador informa al motor MySQL para retrasar la ejecución de la instrucción DELETE hasta el momento en que no haya conexiones leyendo de la tabla de la que estamos intentando DELETE.
Esto ayuda a lograr la coherencia en todas las demás operaciones que se realizarán en esa mesa. Esto también ayuda a evitar problemas de bloqueo de tablas.
# 2) RÁPIDO:
Siempre que eliminamos una fila, el índice correspondiente también se elimina. Recuperar el espacio en el momento de la ejecución de la instrucción DELETE consume tiempo del procesador. Si usamos la palabra clave QUICK, el espacio de índice correspondiente permanece sin utilizar y se puede utilizar cuando se insertan nuevos registros que se ajustan al rango de índice que se eliminó anteriormente.
Por ejemplo, considere una tabla de empleados donde el ID de empleado es el índice. Siempre que un empleado deja una organización, debemos eliminar el registro correspondiente. Si usamos la cláusula QUICK, el espacio de índice correspondiente permanecerá sin utilizar.
Cuando un nuevo empleado se une, obtendrá un nuevo número de empleado y no el mismo número de la persona que se fue. En tales ejemplos, no es recomendable utilizar QUICK.
Ejemplo de MYSQL DELETE
A continuación se muestra una tabla de muestra creada en MYSQL.
Nombre de esquema: Pacífico
Nombre de la tabla: empleados
Nombres de columna:
empNum; Contiene valores enteros para el número de empleado.
apellido: Contiene valores varchar para el apellido del empleado.
nombre de pila: Contiene valores varchar para el nombre del empleado.
Email: Contiene valores varchar para el ID de correo electrónico del empleado.
deptNum; Contiene varchar para el ID de departamento al que pertenece un empleado.
salario: Contiene valores decimales del salario de cada empleado.
fecha de inicio: Contiene los valores de fecha para la fecha de incorporación del empleado.
Nombre de esquema: Pacífico
Nombre de la tabla: empleados_historia
Nombres de columna:
empNum; Contiene los valores enteros para el número de empleado.
apellido: Contiene valores varchar para el apellido del empleado.
nombre de pila: Contiene valores varchar para el nombre del empleado.
Email: Contiene valores varchar para el ID de correo electrónico del empleado.
deptNum; Contiene varchar para el ID de departamento al que pertenece un empleado.
salario: Contiene valores decimales del salario de cada empleado.
fecha de inicio: Contiene valores de fecha para la fecha de incorporación del empleado.
Nombre de esquema: Pacífico
Nombre de la tabla: departamentos
Nombres de columna:
deptNum; Contiene varchar para el ID de departamento dentro de una organización.
ciudad: Contiene el nombre de la ciudad desde la que trabajan los departamentos.
país: Contiene el nombre del país correspondiente a la ciudad.
prima: Mantiene el valor porcentual del bono.
MySQL eliminar una sola fila
La primera y más fácil forma de eliminar registros de la tabla es eliminar los registros uno por uno, utilizando una cláusula WHERE muy fuerte que garantiza que solo se elimine un registro adecuado. Esto podría usarse más para eliminar un conjunto de tipos similares de filas de la tabla.
Repasemos la declaración de eliminación y su ejecución en detalle.
Aquí intentaremos eliminar a un empleado llamado 'Chris Nolan' con el número de empleado 1013.
Como se muestra en la imagen de arriba, la declaración DELETE se ha ejecutado con éxito y se eliminó una fila de la tabla del empleado.
los producción declaración a continuación muestra el momento en el que se ejecutó la declaración, la declaración de MySQL que se ejecutó y el número de filas que se vieron afectadas.
Por favor, esté muy seguro acerca de la cláusula WHERE aquí. Si la cláusula WHERE es incorrecta o si pierde la oportunidad de tener una cláusula WHERE, puede provocar la pérdida de datos. Para evitar tales situaciones, en producción, existe la práctica de realizar copias de seguridad o descargas periódicas de datos.
Para verificar la salida de esta instrucción DELETE, ejecutemos la instrucción SELECT en esta tabla con empNum como 1013.
Los resultados de salida muestran un valor NULL para todas las columnas, lo que implica que no existe ningún registro para dicho empNum. El resultado de la consulta a continuación muestra que se han devuelto 0 filas, lo que implica que el registro ha sido eliminado por la ejecución de la declaración DELETE anterior.
Consulta:
Instantánea de la tabla después:
empNum | apellido | nombre de pila | deptNum | Salario | |
---|---|---|---|---|---|
7 | Esto es relativamente más lento que TRUNCATE, en comparación con la eliminación de datos completos de la tabla. | Esto es relativamente más rápido que DELETE, en comparación con la eliminación de datos completos de la tabla. | |||
NULO | NULO | NULO | NULO | NULO | NULO |
MySQL DELETE usando la cláusula ORDER BY y LIMIT
ORDER BY y LIMIT son dos cláusulas que hemos discutido anteriormente. El primero ayuda a decidir el orden en el que se deben depurar los registros, ya sea eliminar registros con empNum en forma ascendente o eliminar registros con el salario en orden descendente. Esto último ayuda a restringir el número de registros que esta transacción puede eliminar.
Por ejemplo, si queremos eliminar solo 2 empleados pertenecientes al departamento número 4, que son asalariados altos. Entonces hay tres partes para esta consulta.
- Primero, necesitamos purgar a los empleados del departamento número 4. Esto será manejado por una cláusula WHERE.
- Próximo, tenemos que purgar a los empleados que están ganando altos salarios. Esto será manejado por la cláusula ORDER BY en la columna de salario en orden descendente.
- Finalmente, necesitamos purgar solo dos empleados. Esto será manejado por la cláusula LIMIT.
Echemos un vistazo a la consulta DELETE y veamos los resultados. Antes de hacerlo, primero identifiquemos cuáles son los registros exactos que queremos eliminar. Usaremos las condiciones anteriores con una instrucción SELECT para obtener los registros que queremos eliminar y luego ejecutar la misma consulta para verificar si esos registros se han eliminado o no.
En la consulta SELECT anterior, hemos cumplido las tres condiciones de las que hablamos anteriormente usando las cláusulas WHERE, ORDER BY y LIMIT. La consulta nos dio 2 registros, uno con empNum 1010 y otro con 1007. Ahora, ejecutaremos la consulta DELETE para asegurarnos de que estos dos registros se eliminen.
Como se muestra en la imagen de arriba, la instrucción DELETE se ha ejecutado correctamente y ha eliminado dos filas de la tabla del empleado. los producción declaración a continuación muestra el momento en el que se ejecutó la declaración, la declaración de MySQL que se ejecutó y el número de filas que se vieron afectadas.
Para verificar la salida de esta declaración DELETE, ejecutemos SELECT para empNum 1010 y 1007. No podemos usar la misma consulta SELECT que se usó anteriormente, ya que mostraría a los otros empleados bajo deptNum 4.
auricular vr compatible con xbox one
Los resultados de salida muestran un valor NULO para todas las columnas, lo que implica que no existe ningún registro para dichos números de empleados. los Producción de la consulta siguiente muestra que se han devuelto 0 filas, lo que implica que el registro ha sido eliminado por la ejecución de la instrucción DELETE anterior.
Consulta:
Instantánea de la tabla después:
empNum | apellido | nombre de pila | deptNum | Salario | |
---|---|---|---|---|---|
NULO | NULO | NULO | NULO | NULO | NULO |
MySQL DELETE usando la cláusula de selección
A continuación, analizaremos el uso de la cláusula SELECT mientras eliminamos registros de una tabla.
Considere el siguiente escenario:
Tenemos dos juegos de tablas: empleados y departamentos. deptNum es como una clave principal en la tabla del departamento y una clave externa en la tabla del empleado. Esto significa que si a un empleado se le asigna un departamento, debe ser de uno de los departamentos en la tabla de departamentos.
Ahora, tenemos que eliminar esos registros de la tabla del departamento donde no se ha asignado ningún empleado hasta ahora. Podemos hacer esto si tenemos una cláusula SELECT en la subconsulta de una consulta DELETE.
Primero identifiquemos los registros que queremos eliminar:
La consulta SELECT anterior tiene una subconsulta.
El funcionamiento de la consulta es el siguiente:
La consulta extrae todos los registros de la tabla del departamento donde deptNum no existe en la tabla del empleado. La unión se realiza en la subconsulta en el deptNum de las dos tablas.
Ahora ejecutemos la consulta DELETE y veamos si podemos eliminar estos dos registros de la tabla del departamento ya que no hay ningún empleado asignado a estos departamentos.
Como se muestra en la imagen de arriba, la declaración de eliminación ha eliminado 2 filas de las tablas de departamento que no tienen ningún empleado asignado.
Para verificar la salida de esta declaración DELETE, ejecutemos SELECT en la tabla y veamos qué tenemos en la salida.
El mensaje de salida de la consulta de verificación anterior dice '0 fila (s) devuelta'. Esto implica que se eliminan las filas con deptNum 6 y 7. La salida tampoco muestra ningún registro en lugar de mostrar valores NULL ya que los registros se han eliminado.
Consulta:
MySQL ELIMINA todos los datos de la tabla
A continuación, veremos el escenario en el que tenemos que eliminar todas las filas o registros de una tabla.
En la situación de producción, es posible que nunca se encuentre con tal situación. Pero este tipo de cosas sería necesario en el área de desarrollo, donde debe probar su código con múltiples escenarios diferentes y es posible que desee volver a crear un nuevo conjunto de datos de prueba eliminando los registros existentes en la tabla.
Primero, echemos un vistazo a los datos que pretendemos eliminar. Intentaremos eliminar datos de la tabla employee_history.
A continuación se muestran los datos actualmente existentes en la tabla.
Aquí tenemos 18 filas en la tabla employee_history. Ahora sigamos adelante y eliminemos todos estos en una sola transacción. La consulta es casi similar a la que discutimos en la primera sección. El único cambio es que necesitamos eliminar la cláusula WHERE de la consulta para que no haya restricciones en el número de filas que queremos eliminar.
Como se muestra en la imagen de arriba, la declaración de eliminación se ejecutó correctamente y eliminó las 18 filas de la tabla employee_history. La declaración de salida a continuación muestra el momento en que se ejecutó la declaración, la declaración de MySQL que se ejecutó y el número de filas que se vieron afectadas.
Para verificar la salida de esta declaración DELETE, ejecutemos SELECT en la tabla y veamos qué tenemos en la salida.
Los resultados de salida muestran un valor NULO para todas las columnas, lo que implica que no existe ningún registro para dichos números de empleados. El resultado de la consulta a continuación muestra que se han devuelto 0 filas, lo que implica que todos los registros se han eliminado mediante la ejecución de la declaración DELETE anterior.
Consulta:
Instantánea de la tabla después:
empNum | apellido | nombre de pila | deptNum | Salario | |
---|---|---|---|---|---|
NULO | NULO | NULO | NULO | NULO | NULO |
MySQL DELETE Toda la tabla
Ahora, veremos el escenario en el que tenemos que eliminar la tabla en sí. En términos de SQL, lo llamamos DROP the table. No importa si la tabla tiene datos o no. Simplemente eliminará la tabla junto con los datos, si los hubiera.
En la sección anterior, eliminamos datos de la tabla employee_history. En esta sección, soltaremos la propia tabla employee_history.
A continuación se muestra el comando junto con su salida:
Como se muestra en la imagen de arriba, la declaración DROP se ha ejecutado con éxito y eliminó la tabla employee_history del catálogo del sistema de la base de datos MySQL.
Si echas un vistazo al mensaje, mostrará '0 filas afectadas'. Esto se debe a que habíamos eliminado las 18 filas de la sección anterior. Si esta tabla tuviera filas, ese número de filas se vería afectado, lo que implica que se eliminaron.
Para verificar la salida de esta declaración DROP, ejecutemos SELECT en la tabla y veamos qué tenemos en la salida.
El mensaje de salida de la consulta de verificación anterior dice que la tabla no existe. Esto valida nuestra ejecución de la declaración DROP anterior para eliminar la tabla.
Consulta:
Comando Truncar MySQL
Ya hemos hablado de eliminar todos los registros de la tabla mediante el comando DELETE. Lo mismo podría lograrse utilizando la declaración TRUNCATE también.
Para este ejemplo, vamos a volver a crear la tabla employee_history y a rellenarla con datos. T Las siguientes son las dos consultas que se han ejecutado para volver a crear la tabla y volver a llenarla:
Consulta:
Así es como se ve la tabla employee_history ahora con datos.
A continuación, eliminaremos todos los registros de esta tabla usando la instrucción TRUNCATE.
Como se muestra en la imagen, la consulta se ejecuta correctamente. Si observa de cerca la parte 'Mensaje', encontrará que dice '0 filas afectadas'. Sin embargo, sabemos que esta tabla tiene 15 filas. Entonces, ¿cómo es que muestra cero?
Razón: A la declaración Truncate no le importa contar cuántas filas se ven afectadas por su ejecución. Simplemente vacía la mesa. Ésta es una de las diferencias significativas entre las declaraciones DELETE y TRUNCATE.
Verifiquemos la ejecución de la declaración TRUNCATE ejecutando una consulta SELECT en la tabla employee_history.
Como se muestra en la imagen de arriba, la consulta no ha devuelto filas y también todas las columnas muestran valores NULL, lo que implica que la declaración TRUNCATE que ejecutamos anteriormente ha eliminado todos los registros de la tabla.
usando ipad para el punto de venta
Consulta:
Diferencia entre declaraciones TRUNCATE y DELETE
Sr. No | ELIMINAR | TRUNCAR |
---|---|---|
1 | Es un DML (lenguaje de manipulación de datos). | Es un DDL (lenguaje de definición de datos). |
2 | Cualquier disparador AFTER DELETE en la tabla se activa cuando usamos el comando DELETE. | Ningún disparador AFTER DELETE en la mesa se activa cuando usamos el comando TRUNCATE. |
3 | Se puede eliminar un registro incluso si hay restricciones de clave externa. | Los registros de la tabla no se pueden truncar si hay restricciones de clave externa. |
4 | La reinicialización de la tabla no ocurrirá. | La tabla se reinicializará. |
5 | Se puede utilizar la cláusula WHERE. | No se puede utilizar la cláusula WHERE. |
6 | Esto elimina un registro a la vez y realiza un seguimiento del número total de registros eliminados en los registros. | Purga todos los registros a la vez y no realiza un seguimiento del número de registros eliminados. |
Integridad referencial y su impacto en DELETE
Antes de que estemos, veamos ¿Qué es la integridad referencial o las restricciones de clave externa o RI?
Las restricciones de clave externa se refieren al establecimiento de una relación o vínculo entre la tabla principal y la secundaria. Esto ayuda a hacer referencias cruzadas de los datos en las tablas que están vinculadas entre sí. Una tabla principal puede tener varias tablas secundarias y viceversa.
Por ejemplo, las dos tablas que hemos estado discutiendo hasta ahora, es decir, empleados y departamentos, están vinculadas entre sí mediante una restricción de clave externa. Esta restricción se establece al hacer que una columna, generalmente la clave principal, sea la columna de clave que une dos tablas.
La columna deptNum en la tabla del departamento se ha vinculado a la columna deptNum en la tabla del empleado. En este caso, los departamentos son la tabla principal y los empleados es la tabla secundaria.
Pero, ¿cómo afecta esto a las declaraciones DELETE?
En MySQL o en cualquier base de datos, hay ciertos escenarios que se deben manejar al eliminar registros de las tablas padre o hijo.
Hay múltiples opciones de referencia que podemos discutir:
# 1) EN BORRAR CASCADA: La regla dice que no podemos eliminar una fila de la tabla principal si tiene alguna referencia o tiene una fila correspondiente en cualquiera de las tablas secundarias. Sin embargo, si una tabla principal tiene bastantes tablas secundarias, entonces es una tarea tediosa eliminar primero los registros de todas y cada una de las tablas secundarias y luego de la tabla principal.
Para esto, existe una solución alternativa llamada ON DELETE CASCADE. Esta es una cláusula que se agrega a la instrucción CREATE de cada una de las tablas secundarias. Entonces, cada vez que decimos eliminar una fila de la tabla principal, el motor MySQL primero identificará las referencias de esa fila en las tablas secundarias y eliminará esos registros y, por último, eliminará el registro de la tabla principal.
# 2) SIN ACCIÓN: Ésta es una opción predeterminada. Si la ejecución de una declaración DELETE intenta eliminar un registro que tiene referencias en cualquiera de las tablas secundarias, entonces con esta opción la ejecución de la declaración se detendrá y la Transacción MySQL se revertirá al último punto de confirmación.
# 3) RESTRICCIÓN: El funcionamiento de RESTRICT y NO ACTION es el mismo. Detendrá la ejecución y emitirá una reversión.
# 4) CONFIGURAR NULO: Si la ejecución de una declaración de eliminación intenta eliminar un registro que tiene referencias en cualquiera de las tablas secundarias, esta opción actualizará el valor de la columna en todas las tablas secundarias como NULL y, una vez hecho, eliminará el registro de la tabla principal. mesa.
# 5) CONFIGURAR POR DEFECTO: Si la ejecución de una instrucción DELETE intenta eliminar un registro que tiene referencias en cualquiera de las tablas secundarias, esta opción actualizará los valores de columna al valor predeterminado como se define en la instrucción CREATE de la tabla.
Preguntas y respuestas frecuentes
P # 1) ¿Cómo eliminar datos de la tabla en MySQL?
Responder: La sintaxis del comando delete para eliminar solo una fila de datos seleccionada se da a continuación.
|_+_|P # 2) ¿Cómo eliminar todos los datos de la tabla en MySQL?
Responder: La sintaxis del comando DELETE para eliminar todas las filas de la tabla es:
|_+_|P # 3) ¿Cómo eliminar la tabla de la base de datos en MySQL?
Responder: El comando drop puede usarse para eliminar la tabla de la base de datos. El usuario puede reemplazar table_name con la tabla que debe eliminarse.
|_+_|P # 4) ¿Cómo eliminar la base de datos en MySQL?
Responder: El comando de caída se puede utilizar para eliminar la base de datos.
|_+_|Los usuarios pueden reemplazar db_name con el nombre de la base de datos que deben eliminarse.
P # 5) ¿Qué es ON DELETE CASCADE en MySQL?
Responder: Cuando se elimina el registro principal, ON DELETE CASCADE crea un registro secundario coincidente para ser eliminado. Por tanto, el efecto de eliminación se transmite en cascada del padre al hijo. Esto puede resultar útil para realizar la eliminación de varias tablas.
P # 6) ¿Por qué TRUNCATE se considera una declaración DDL?
Responder: La declaración TRUNCATE en realidad suelta y vuelve a crear la tabla junto con los metadatos de la tabla. Por lo tanto, es una declaración DDL.
P # 7) ¿Se puede revertir TRUNCATE?
Responder: No, TRUNCATE es una declaración de confirmación automática si se ejecuta de forma independiente. Esto significa que no se puede revertir ya que la confirmación también se ejecuta junto con él. Pero si es parte de una transacción, entonces se puede revertir usando los archivos de registro SQL.
P # 8) ¿Se pueden revertir las declaraciones DELETE?
Responder: Sí, las declaraciones DELETE se pueden revertir. Simplemente ejecute el comando ROLLBACK antes de ejecutar COMMIT.
P # 9) ¿Se puede eliminar una columna usando el comando DELETE?
Responder: La adición o eliminación de columnas son comandos DDL. Se debe usar una instrucción ALTER para DROP una columna de la tabla.
Conclusión
En este tutorial, hemos aprendido diferentes formas de ejecutar declaraciones DELETE en MySQL.
En pocas palabras, vimos:
- MySQL eliminar una sola fila
- Eliminar MySQL usando ORDER BY y cláusula de límite
- Eliminar MySQL usando la cláusula de selección
- MySQL eliminar toda la tabla
- Truncar MySQL
- Diferencia entre declaraciones TRUNCATE y DELETE
- Integridad referencial y sus impactos en DELETE
Podemos utilizar cualquiera de los anteriores, según el requisito.
¡¡Feliz lectura!!
Lectura recomendada
- Sintaxis del comando Unix Cat, opciones con ejemplos
- Comando de ordenación de Unix con sintaxis, opciones y ejemplos
- Insertar MySQL en la tabla: sintaxis y ejemplos de instrucciones de inserción
- MongoDB Actualizar y eliminar documento con ejemplos
- Cortar comando en Unix con ejemplos
- Nuevos / eliminar operadores en C ++ con ejemplos
- Tutorial de declaración de actualización de MySQL: ejemplos y sintaxis de consulta de actualización
- Comando Ls en Unix con ejemplos