Eliminar registros de dos tablas en MySQL

Eliminar registros de dos tablas en MySQL. SI deseamos borrar múltiples registros en varias tablas dependientes podemos hacerlo mediante los siguientes ejemplos propuestos.

Planteamos el ejemplo de eliminar registros de 2 tablas

Tenemos en una tabla llamada Facturas, con los datos de la factura. Además, tenemos la tabla Facturas_detalles, dónde almacenamos los detalles y/o productos de las facturas. Por lo tanto, al eliminar una factura debe eliminarse los detalles de las facturas relacionadas.

  • Tabla Facturas. – Almacenamos todas las facturas emitidas
  • Tabla Faturas_detalles. – Aquí almacenamos los productos de las facturas a través de la ID factura.

Eliminar datos de dos tablas a la vez.

A continuación, veremos varias formas para lograr el objetivo deseado.

Eliminar registros de dos tablas en MySQL
Eliminar registros de dos tablas en MySQL

1ra Forma: Usando consultas SQL

Para resolver el inconveniente podemos realizar la siguiente consulta SQL en nuestro fichero de PHP o Gestor de base de datos, veamos el ejemplo.

DELETE a1, a2 FROM
Facturas AS fac JOIN Facturas_detalles AS det
WHERE det.factura_ID=fac.Id AND fac.Id=1560

Explicación de la consulta anterior:

Al ejecutar la consulta SQL anterior, estamos eliminando los registros de facturas y también de la tabla Facuras_detalles y que cumplan la condición que la Id sea la 1560.

Importante, toda eliminación es crítica e irrecuperable. Por lo tanto, se recomienda realizar una copia de seguridad de la base de datos antes de realizar cualquier consulta de eliminación de registros. Nosotros no nos hacemos cargo de cómo usar el código que mostramos, lo realizaras bajo vuestra responsabilidad.

Segundo Ejemplo: Usando Where

Podemos tomar las dos tablas y separarlo por comas y usar la cláusula USING para eliminar registros en MySQL

DELETE FROM `Table1` t1, `Table2` t2 USING t1, t2
WHERE t1.`id` = t2.`id` AND t1.`id` = 10;

Tercer ejemplo: Usando Inner Join

Inner Join por excelencia nos sirve para unir dos tablas y extraer resultados únicos, además podemos usarlo para eliminar registros.

DELETE t1,t2 FROM t1
INNER JOIN
t2 ON t2.ref = t1.id 
WHERE
t1.id = 1;

Dado que está eliminando filas de varias tablas, lo único que falta es especificar en qué tablas se eliminará la fila.

DELETE `users`,`pd`
FROM `users`, `pd`
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010;

Si observamos, en la consulta anterior, eliminará filas de ambas tablas. Sugiero cambiar la declaración usando ANSI join como se muestra a continuación,

DELETE a, b 
FROM users a
INNER JOIN pd b
ON a.i_uid = b.i_uid
WHERE a.i_uid = 1010

Este otro ejemplo es si solo desea eliminar solamente de la tabla de usuarios

DELETE a, b 
FROM users a
INNER JOIN pd b
ON a.i_uid = b.i_uid
WHERE a.i_uid = 1010

2da Forma: MySQL ON DELETE CASCADE

La cláusula ON DELETE CASCADE en MySQL se usa para eliminar automáticamente los registros coincidentes de la tabla secundaria cuando eliminamos las filas de la tabla principal. Es una especie de acción referencial relacionada con la clave foránea.

Ejemplo de tabla ON DELETE CASCADE

CREATE TABLE Facturas( 
fac_id int(10) NOT NULL, 
name varchar(40) NOT NULL, 
PRIMARY KEY (fac_id) 
);

Ahora en la tabla dependiente configuramos correctamente la cláusula ON DELETE CASCADE

CREATE TABLE Facturas_detalles( 
det_id int(10) PRIMARY KEY NOT NULL, 
fac_id int(10) NOT NULL, 
FOREIGN KEY (fac_id) REFERENCES Facturas_detalles(fac_id) ON DELETE CASCADE 
);

Si en la base datos relacionamos correctamente las dos tablas con claves foráneas (ON DELETE CASCADE), la eliminación se haría de forma automática. Sólo es un ejemplo para eliminar en una sola consulta dos registros de dos tablas diferentes.

Los ejemplos anteriores son correctas. Sin embargo, puede usar el motor InnoDB y especificar claves externas y ELIMINAR EN CASCADA. De modo que cada vez que elimine un usuario, eliminará todas las filas de referencia de diferentes tablas.

Conclusión

En este articulo hemos aprendido a eliminar registros relacionados como el ejemplo clásico de Facturas y detalles Facturas.

Hemos visto varios ejemplos, además en la segunda forma hemos aplicado como eliminar en cascada para eliminar registros relacionados de dos o más tablas.

Nuevamente recalco, si desean ejecutar las consultas SQL de eliminación siempre realizar su copia de seguridad para prevenir resultados no deseados.

Además, nunca ejecuten la consulta en bases de datos de producción, traten de hacer en un entorno demo para comprobar los resultados, y si todo va bien ya bajo su responsabilidad pueden implementarlo en sus bases de datos,

Espero que la explicación les ayude en sus desarrollos web

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio