Como borrar filas de varias tablas en MySQL

DELETE FROM tabla1, tabla2, tabla3
USING tabla1
INNER JOIN tabla2 USING (id)
INNER JOIN tabla3 USING (id)
WHERE tabla1.id = 123

Por ejemplo, digamos que tienes tres tablas: “productos”, “categorias” y “cats_prods”. Cada producto puede asociarse con más de una categoría. La tabla “cats_prods” guarda todas las categorias asociadas con cada producto. Si queremos eliminar un producto, también tenemos que eliminar todas las filas de la tabla que cats_prods que contienen referencias a ese producto. El siguiente query elimina tanto la fila de la tabla productos como las filas correspondientes de la tabla cats_prods.

DELETE FROM cats_prods, productos
USING cats_prods
INNER JOIN productos USING (prod_id)
WHERE cats_prods.prod_id = 25

DavidM
Acerca de DavidM
DavidM lleva trabajando en los campos del marketing por Internet y el posicionamiento en buscadores desde el año 2004. Puede ver su biografía aquí.

8 comentarios para el post “Como borrar filas de varias tablas en MySQL”

  1. Comentario de nachito79 el 8 de julio de 2009 a las 19:22

    Muy buen ejemplo, me servio para lo que necesitaba (en realidad en parte). Igualmente al que vaya a usar el ejemplo que pegue una buena leida primero, ya que cuando lo relei, entendi que borraba de las dos tablas al mismo tiempo :D , que era lo queria pero despues me di cuenta que daban bien los numeros!!

  2. Comentario de crinfo el 31 de julio de 2010 a las 01:41

    gracias amigo, intente hacerlo para mi aplicacion pero no me funciono xD
    lo q pasa q tengo 3 tablas, alumno, asignatura_alumnos,carrera_alumnos, el problema si quiero eliminar a algun alumno por su rut, se tendrian q eliminar los datos de la tabla alumno donde este su rut, de la tabla carrera_alumno donde este su rut y de la tabla asignatura_alumno, donde este su rut, es decir, hacer desaparecer en las 3 tablas todos los campo donde este el rut asociado.
    Hice esto pero no me funciono:
    delete from alumno,carrera_alumno,asignatura_alumno USING alumno
    INNER JOIN carrera_alumno USING (rut_alumn)
    INNER JOIN asignatura_alumno USING (rut) where alumno.rut =11111111

    ojala me puedas ayudar, muchas grax :D

  3. Comentario de jhon el 4 de julio de 2011 a las 04:09

    Muy buena aportacion, tambien me ayudo. gracias

  4. Comentario de selene el 23 de julio de 2011 a las 21:07

    Gracias! .. funciona perfecto .. ya tenia rato buscando y no daba con la solución .

  5. Comentario de anonimous el 11 de agosto de 2011 a las 02:27

    has hecho mal pero a mi tampoco me corre no me llega a eliminar nada y me dce q hay un herror por el foreign key q tieen la segunda tabla el codigo si se me compila y tambien dentro de un procedimiento almacenado q para eso lo necesitaba pero no funciono aunque el procedimiento almacenado si se creo sin errores

  6. Comentario de RaulN el 31 de agosto de 2011 a las 00:01

    Saludos a mi me funciono con el siguiente codigo, pongo un ejemplo con una conexion a MySQL en lenguaje C#.net

    try
    {
    string codigo = Convert.ToString(dtgMostrar.CurrentRow.Cells[0].Value);
    MySqlConnection cnn = new MySqlConnection(conexion);

    MySqlCommand mycommandg = new MySqlCommand(“DELETE FROM proveedor_producto WHERE cod_proveedor= ?cod_proveedor; DELETE FROM compra WHERE cod_proveedor= ?cod_proveedor; DELETE FROM proveedor WHERE cod_proveedor= ?cod_proveedor; DELETE FROM entrega WHERE cod_proveedor= ?cod_proveedor”);

    mycommandg.Parameters.Add(“?cod_proveedor”, MySqlDbType.Int32, 20).Value = codigo;

    mycommandg.Connection = cnn;
    cnn.Open();
    mycommandg.ExecuteNonQuery();
    mycommandg.Connection.Close();

    MessageBox.Show(“Se ha eliminado el proveedor satisfactoriamente”, “EXITO”, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

    }
    catch
    {
    MessageBox.Show(“No se pudo conectar a la base de datos”, “ERROR”, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

    }

  7. Comentario de RaulN el 31 de agosto de 2011 a las 00:03

    Primero elimino los registros de las tablas que estan relacionadas con Proveedor y luego los registros de la Tabla proveedor en solo Query

    Parece muy largo pero en fin funciona XD y es facil de recordar

  8. Comentario de didi el 31 de octubre de 2011 a las 16:57

    Hola tengo esta que eliminar el id de dos tablas solo que el id no tiene el mismo nombre como lo hago?? tengo esta consulta

    delete from cliente,usuario where cliente.cli_cliente=usuario.clcliente and cli_cliente=’3612′

    espero me puedan apoyar

Escribe un comentario

Entradas realcionadas

  1. La importancia del error 404 para el posicionamiento web