vaciar una todas tablas tabla para las existe eliminar eliminacion datos como codigo mysql sql mysql-error-1064 sql-delete

para - truncate todas las tablas de una base de datos mysql



¿Cómo eliminar desde múltiples tablas en MySQL? (6)

Dado que esto parece ser una simple relación padre / hijo entre pets y pets_activities pets , sería mejor que pets_activities tu restricción de clave externa con una cascada de eliminación.

De esta forma, cuando se elimina una fila de pets , también se eliminan pets_activities filas de pets_activities asociadas a ella.

Entonces su consulta se convierte en simple:

delete from `pets` where `order` > :order and `pet_id` = :pet_id

Estoy intentando eliminar de algunas tablas a la vez. He hecho un poco de investigación, y se me ocurrió esto

DELETE FROM `pets` p, `pets_activities` pa WHERE p.`order` > :order AND p.`pet_id` = :pet_id AND pa.`id` = p.`pet_id`

Sin embargo, estoy recibiendo este error

Uncaught Database_Exception [1064]: tiene un error en su sintaxis de SQL; verifique el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de ''p, pets_activities pa ...

Nunca he hecho una eliminación de tabla cruzada antes, ¡así que no tengo experiencia y estoy estancado por ahora!

¿Qué estoy haciendo mal?



No tengo una base de datos mysql para probar en este momento, pero ¿ha intentado especificar qué eliminar antes de la cláusula from? Por ejemplo:

DELETE p, pa FROM `pets` p, `pets_activities` pa WHERE p.`order` > :order AND p.`pet_id` = :pet_id AND pa.`id` = p.`pet_id`

Creo que la sintaxis que usaste está limitada a las versiones más nuevas de mysql.


Para cualquiera que lea esto en 2017, así es como hice algo similar.

DELETE pets, pets_activities FROM pets inner join pets_activities on pets_activities.id = pets.id WHERE pets.`order` > :order AND pets.`pet_id` = :pet_id

En general, para eliminar filas de varias tablas, la sintaxis que sigo se proporciona a continuación. La solución se basa en la suposición de que existe alguna relación entre las dos tablas.

DELETE table1, table2 FROM table1 inner join table2 on table2.id = table1.id WHERE [conditions]


Utilizar esta

DELETE FROM `articles`, `comments` USING `articles`,`comments` WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4

o

DELETE `articles`, `comments` FROM `articles`, `comments` WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4


Use un JOIN en la declaración DELETE .

DELETE p, pa FROM pets p JOIN pets_activities pa ON pa.id = p.pet_id WHERE p.order > :order AND p.pet_id = :pet_id

Alternativamente puedes usar ...

DELETE pa FROM pets_activities pa JOIN pets p ON pa.id = p.pet_id WHERE p.order > :order AND p.pet_id = :pet_id

... para eliminar solo de pets_activities

Ver http://dev.mysql.com/doc/refman/5.0/en/delete.html

Para las eliminaciones de tablas individuales, pero con integridad referencial, hay otras formas de hacerlo con EXISTS, NOT EXISTS, IN, NOT IN, etc. Pero el anterior donde se especifica desde qué tablas se debe eliminar con un alias antes de que la cláusula FROM pueda obtener salir de unos pocos lugares muy difíciles con mayor facilidad. Tiendo a llegar a un EXISTE en el 99% de los casos y luego está el 1% donde esta sintaxis de MySQL toma el día.