DELETE CASCADE
est un attribut de la contrainte de clé étrangère. Malheureusement, ce n'est pas quelque chose que vous pouvez utiliser en tant qu'option avec une instruction DELETE
(ce qui serait vraiment cool en fait)
Si vos clés étrangères n'ont pas été déclarées en cascade, vous devez "remonter le temps".
Malheureusement, vous ne nous montrent la structure de votre table réelle si nous supposons quelque chose comme ceci:
main_table (main_id)
child_one (id, main_id)
child_two (id, id_one)
child_three (id, id_two)
(je sais que vous avez dit 8 tables, mais pour le bien de la démonstration, j'écourté un peu, mais cela ne change pas le sous-jacent « stratégie »)
en supposant que vous voulez supprimer la ligne avec main_id = 42
de `main_table:
vous devez d'abord supprimer les lignes de child_three en utilisant quelque chose comme ceci:
delete from child_three
where id_two in (select id
from child_two
where id_one in (select id
from child_one
where main_id = 42);
Ensuite, supprimez les lignes de child_two:
delete from child_two
where id_one in (select id
from child_one
where main_id = 42);
Puis child_one:
delete from child_one
where main_id = 42;
Et enfin la table principale:
delete from main_table
where id = 42;
Certains clients SQL peut effectivement générer ces déclarations pour vous. Je ne sais pas si SQL Developer peut cependant.
Qu'est-ce que SQL utilisez-vous: MySQL, MSSQL, etc ..? – Michael
Vous pouvez le faire avec 8 instructions de suppression, une pour chaque table, dans le bon ordre afin que les contraintes FK ne soient pas violées. –
@Michael j'utilise MySQL – Ofer