Eliminar registros de dos tablas en MySQL

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.

Índice

    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 una respuesta

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

    Subir