De esta sintaxis podemos destacar los siguientes puntos:
- FROM y table_or_view_name: especificamos la tabla de trabajo donde deseamos eliminar datos.
- WHERE: condiciones que se deben cumplir para llevar acabo la eliminación de datos.
Como puedes observar, llevar acabo un DELETE, pareciera ser una consulta sencilla, no obstante, es una de las clausulas a la que le debes tomar mayor atención al ejecutarla y, debes, comprenderla a la perfección, además, siempre debes tener un respaldo de tus datos, más adelante haremos una clase de como puedes respaldar tus bases de datos, por lo pronto, recuerda siempre practicar en un ambiente de pruebas o desarrollo, donde, no haya riesgos de ejecutar este tipo de clausulas.
En los siguientes ejemplos crearemos consultas básicas y comunes que te serán de gran ayuda en la practica, así que pasemos a los ejemplos para que te quede más claro.
Las tablas y bases de datos que utilizaremos las hemos creado en las clases anteriores, así que si tienes dudas por favor revisa las siguientes clases:
DELETE SQL: ¿Cómo eliminar todos los datos de de una tabla en SQL Server?
Para eliminar todos los registros de una tabla en SQL podemos hacerlo a través de dos sentencias, la primera obviamente es DELETE, aunque por rendimiento, no es lo más optimo, pero aun así podemos hacerlo, solo basta con no indicar condicionales, es decir, no escribir ningún WHERE, por ejemplo:
USE ewebikdb;
DELETE FROM tipos_gps_2;
Como puedes observar, esto es muy fácil, no obstante, en una tabla con una gran cantidad de registros, esto no es lo mejor, ya que tardaría bastante y bloquearíamos la tabla durante todo el proceso, es por ello que existe una segunda alternativa para eliminar todos los datos de una tabla de forma simple, esto es a través de la clausula TRUNCATE TABLE.
¿Qué es TRUNCATE TABLE?
La clausula TRUNCATE TABLE nos permite eliminar todos los registros de una tabla.
Sintaxis T-SQL TRUNCATA TABLE
TRUNCATE TABLE
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
[ WITH ( PARTITIONS ( { <partition_number_expression> | <range> }
[ , ...n ] ) ) ]
[ ; ]
<range> ::=
<partition_number_expression> TO <partition_number_expression>
Como puedes observar, TRUNCATE TABLE tiene una sintaxis muy simple, solo debemos pasar el nombre de la tabla, y no requiere de ninguna condicional, ya que, la clausula afecta toda la tabla en general.
Si extrapolamos el ejemplo anterior, pero ahora aplicando TRUNCATE TABLE, quedaría de la siguiente manera:
USE ewebikdb;
TRUNCATE TABLE tipos_gps_2;
En ambos casos, ya sea, DELETE o TRUNCATE, llegamos al mismo resultado, pero, para el caso donde deseamos eliminar todos los datos de una tabla, TRUNCATE TABLE, suele ser la mejor opción, ahora pasemos con otros ejemplos.
TRUNCATE TABLE con llaves foráneas (FOREIGN KEY) SQL Server
Ahora, que pasa si la tabla a la que deseamos aplicar un TRUNCATE TABLE tiene una llave foránea (FOREIGN KEY), pues si intentamos aplicar el TRUNCATE TABLE marcara el siguiente error:
- Cannot truncate table 'tipos_gps' because it is being referenced by a FOREIGN KEY constraint.
Obviamente tipos_gps es nuestra tabla, para este caso, lo primero que debemos eliminar es la referencia FOREIGN KEY y después aplicamos el TRUNCATE TABLE, la eliminación de dicha referencia la llevamos acabo a a través de DROP CONSTRAINT, como lo vimos en la clase de tablas, veamos el siguiente código:
USE ewebikdb;
ALTER TABLE equipos_gps
DROP CONSTRAINT
fk_cod_gps;
TRUNCATE TABLE tipos_gps;
ALTER TABLE equipos_gps
ADD CONSTRAINT fk_cod_gps FOREIGN KEY (cod_gps)
REFERENCES tipos_gps (cod_gps)
ON DELETE CASCADE
ON UPDATE CASCADE
;
- Primero a través de ALTER TABLE y DROP CONSTRAINT, eliminamos la referencia FOREIGN KEY de nombre “fk_cod_gps” (fk_cod_gps la creamos en la clase de tablas en SQL).
- Una ves eliminada la referencia, podemos aplicar nuestro TRUNCATE TABLE y ya no tendremos el error anterior.
- Por ultimo, tenemos que volver a crear nuestra referencia “fk_cod_gps” o FOREIGN KEY a través de ADD CONSTRAINT.
Sin embargo, si intentáramos crear nuevamente nuestra referencia habría un conflicto, ya que, en la tabla equipos_gps, existen datos, pero como ya hemos truncado la tabla “tipos_gps”, los valores que existan en la columna cod_gps no pueden ser ligados a la tabla tipos_gps, ya que simplemente no existen, por lo que:
- Primero tendríamos que eliminar los datos en equipos_gps
- Y después volver a crear el FOREIGN KEY
Esto es un ejemplo de la importancia de usar llaves primaras y foráneas para cuidar la integridad de los datos, si tienes dudas de esto, por favor ve el vídeo para que comprendas a la perfección, ya que ahí lo hacemos paso a paso.
DELETE WHERE: ¿Cómo eliminar datos específicos de una tabla?
Ahora que ya sabes como eliminar todos los datos, seguramente te enfrentarás al caso, donde, sólo quieres eliminar ciertos datos de una tabla, para ello, la clausula DELETE permite establecer condicionales a través de WHERE.
También aprovecho para eliminar datos de equipos_gps y podamos volver a crear el FOREIGN KEY, así que hagamos un ejemplo:
USE ewebikdb;
DELETE FROM equipos_gps
WHERE
cod_gps IN (1,2,3)
;
- Como puedes observar, en este ultimo DELETE, sólo eliminamos los registros donde “cod_gps” es igual a 1,2 y 3.
El comando DELETE suele ser un comando bastante básico en cuanto a sintaxis, no obstante, sus efectos son de alto impacto, ya que, si no tienes un respaldo, podrías crear inconsistencias en tus datos al aplicar un DELETE de forma incorrecta, así que ten cuidado.
Excelente, hemos llegado al final de esta clase, hoy has aprendido:
- Como eliminar todos los datos de una tabla, ya sea a través de DELETE o TRUNCATE TABLA, y que para este caso, TRUNCATE suele ser una mejor opción.
- También aprendiste como especificar los datos que deseas eliminar a través de ciertas condicionales (WHERE).
Sin más, espero te haya gustado y nos vemos en el siguiente post.