2013-01-13 3 views
0

Afin de maintenir l'intégrité référentielle j'ai des contraintes de clé étrangères définies sur plusieurs tables, sansON CASCADE DELETE.supprimer en cascade dans la console MySQL

Cependant, parfois, j'aimerais me relaxer un peu, le meilleur exemple étant quand dans un environnement de développement je voudrais créer une copie rognée/assainie d'un ensemble de données de production. Donc, je voudrais pouvoir faire quelque chose comme:

DELETE FROM x WHERE foo = 'bar' 

et ont des lignes dans une autre table y qui référencent les lignes supprimées dans x également être supprimé. À l'heure actuelle avec mes contraintes en place cela échoue avec:

Cannot delete or update a parent row: a foreign key constraint fails 

Est-il possible de le faire dans MySQL sans modifier la table? Je me souviens vaguement de quelque chose comme DELETE CASCADE FROM x WHERE foo = 'bar' d'Oracle ou peut-être Postgres, mais je ne sais pas comment faire cela en MySQL. Je connais FOREIGN_KEY_CHECKS = 0, mais cela laissera simplement les références pendantes dans y; Je veux qu'ils soient enlevés.

Répondre

0

essayer,

DELETE x, y 
FROM x 
     INNER JOIN y ON x.foo = y.foo 
WHERE x.foo = 'bar' 
+0

C'est très bien dans les cas simples, mais parfois il y a plusieurs niveaux (x -> y -> z, etc.). Idéalement, je voudrais cascade les suppressions automatiquement sans spécifier les jointures manuellement. –