Existe-t-il une syntaxe spéciale pour exécuter une suppression en cascade sur DB2 ou est-il seulement possible de créer des tables "cascadables" en les définissant avec l'option "ON DELETE CASCADE"? Ce que j'essaye de réaliser est de supprimer d'autres lignes de table basées sur une même clé étrangère quand je supprime cette clé, mais ceci est fait sur une base de données déjà existante et remplie de données.DB2 cascade delete commande?
4
A
Répondre
8
Comme vous l'avez dit, vous devez soit créer avec un ON DELETE CASCADE
FKs clause ou à avant de supprimer les autres lignes avec une sous-sélection-supprimer.
Donc, si vous n'avez pas vous devez faire
DELETE FROM ORDERS_ITEMS WHERE ORDER_ID in (
SELECT ORDER_ID FROM ORDERS WHERE STATUS = 'Canceled'
);
DELETE FROM ORDERS_ADDRESS WHERE ORDER_ID in (
SELECT ORDER_ID FROM ORDERS WHERE STATUS = 'Canceled'
);
DELETE FROM ORDERS WHERE STATUS = 'Canceled';
clause ON DELETE CASCADE
Il est simple, mais est un peu redondant de sorte que vous pouvez utiliser l'instruction WITH.
Si la requête pour sélectionner les lignes requises est assez grand, et si vous ne vous pouvez pas avoir au moins un niveau d'isolation RR, utiliser un TEMPORARY table:
DECLARE GLOBAL TEMPORARY TABLE TMP_IDS_TO_DELETE (ID BIGINT) NOT LOGGED;
INSERT INTO SESSION.TMP_IDS_TO_DELETE (ID)
SELECT ORDER_ID FROM ORDERS WHERE STATUS = 'Canceled';
DELETE FROM ORDERS_ITEMS WHERE ORDER_ID in (
SELECT ID FROM SESSION.TMP_IDS_TO_DELETE
);
DELETE FROM ORDERS_ADDRESS WHERE ORDER_ID in (
SELECT ID FROM SESSION.TMP_IDS_TO_DELETE
);
DELETE FROM ORDERS WHERE ORDER_ID in (
SELECT ID FROM SESSION.TMP_IDS_TO_DELETE
);
Cette De cette façon, vous êtes sûr que vous allez supprimer les mêmes lignes dans chaque table, et une erreur FK se déclenchera encore si vous manquez quelque chose. Par défaut, la table temporaire se videra elle-même lors de la validation.
Questions connexes
- 1. Comment utiliser delete cascade dans mysql?
- 2. Transaction SQL Server imbriquée en cascade delete
- 3. CASCADE Delete est-il exécuté en tant que transaction?
- 4. Déclencheurs Cascade dans SQLite
- 5. JPA: Reverse cascading delete
- 6. Comment limiter le nombre de lignes dans un DELETE avec DB2?
- 7. hibernate cascade suppression
- 8. Problème de cascade NHibenate
- 9. ABPersonViewController + delete
- 10. MySQL InnoDB CASCADE?
- 11. Quelle est la différence entre REMOVE et DELETE?
- 12. Quelle est la différence entre DELETE_ORPHAN et DELETE?
- 13. Fichier script db2 sql
- 14. ORM & Logical Delete
- 15. ASP.NET gridview delete
- 16. SVN récursif delete
- 17. Ctrl-Delete dans JTextField
- 18. MSBuild delete process
- 19. hibernate cascade question
- 20. cascade NHibernate - problème avec des entités indépendantes
- 21. Hibernate cascade supprimer ne fonctionne pas
- 22. Quels caractères ne sont pas autorisés dans une commande ftp Delete?
- 23. php + unixODBC + DB2 + DESCRIBE = jeton non valide?
- 24. Comment exporter une base de données DB2 sans serveur DB2
- 25. Enregistrement des instructions MySQL DELETE
- 26. delete [] et fuites de mémoire
- 27. AJAX delete - en utilisant jQuery
- 28. SQL DELETE tombant dans PHPmyAdmin
- 29. Contrôle Subsonic et gridview delete
- 30. Tortoise Delete File Référentiel système