J'ai une base de données de composants. Chaque composant est d'un type spécifique. Cela signifie qu'il existe une relation plusieurs-à-un entre un composant et un type. Quand je supprime un type, je voudrais supprimer tous les composants qui ont une clé étrangère de ce type. Mais si je ne me trompe pas, la suppression en cascade supprimera le type lorsque le composant est supprimé. Y a-t-il un moyen de faire ce que j'ai décrit?Comment utiliser delete cascade dans mysql?
Répondre
Voici ce que vous incluriez dans votre table de composants.
CREATE TABLE `components` (
`id` int(10) unsigned NOT NULL auto_increment,
`typeId` int(10) unsigned NOT NULL,
`moreInfo` VARCHAR(32),
-- etc
PRIMARY KEY (`id`),
KEY `type` (`typeId`)
CONSTRAINT `myForeignKey` FOREIGN KEY (`typeId`)
REFERENCES `types` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
)
Rappelez-vous simplement que vous avez besoin d'utiliser le moteur de stockage InnoDB: le moteur de stockage par défaut MyISAM ne supporte pas les clés étrangères.
Vous devez définir vos contraintes de clé étrangère comme ON DELETE CASCADE.
Remarque: Vous devez utiliser le moteur de stockage InnoDB, le moteur de stockage MyISAM par défaut ne prend pas en charge les relations de clés étrangères.
CREATE TABLE `table2` (
`id` int(11) NOT NULL auto_increment,
`name` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `ids` (`ids`)
CONSTRAINT `foreign` FOREIGN KEY (`ids`)
REFERENCES `table2` (`ids`) ON DELETE CASCADE ON UPDATE CASCADE
)
utiliser cette sql
SUPPRIMER T1, T2 DE T1 INNER JOIN T2 T1.key = T2.key condition WHERE
Ceci n'utilise pas la fonctionnalité 'CASCADE' comme demandé par op. – displayname
Mais cela résout le problème sans mettre à jour la structure de base de données existante. –
- 1. DB2 cascade delete commande?
- 2. Transaction SQL Server imbriquée en cascade delete
- 3. MySQL InnoDB CASCADE?
- 4. Enregistrement des instructions MySQL DELETE
- 5. Déclencheurs Cascade dans SQLite
- 6. CASCADE Delete est-il exécuté en tant que transaction?
- 7. Qu'est-ce qu'un retour réussi de MySQL DELETE? Comment vérifier si DELETE a réussi?
- 8. Python MySQL - SELECT fonctionne mais pas DELETE?
- 9. Cascade sur Supprimer ou utiliser les déclencheurs?
- 10. Ctrl-Delete dans JTextField
- 11. Utiliser datediff dans MySQL
- 12. JPA: Reverse cascading delete
- 13. comment utiliser ALL clause dans mysql
- 14. Comment utiliser XPATH dans MySQL select?
- 15. hibernate cascade suppression
- 16. Résolution en cascade dans Unity
- 17. Problème de cascade NHibenate
- 18. ABPersonViewController + delete
- 19. SQL DELETE tombant dans PHPmyAdmin
- 20. Contrôle Subsonic et gridview delete
- 21. Quelle est la différence entre REMOVE et DELETE?
- 22. ADO.NET Entity Framework: Comment obtenir des suppressions automatiques en cascade?
- 23. Hibernate - Comment supprimer en cascade des objets détachés
- 24. ASP.NET gridview delete
- 25. SVN récursif delete
- 26. Quelle est la différence entre DELETE_ORPHAN et DELETE?
- 27. Comment utiliser mySQL avec Apache Tomcat 6
- 28. MSBuild delete process
- 29. Comment créer un modèle Django avec ForeignKeys qui ne cascade pas les suppressions à ses enfants?
- 30. ORM & Logical Delete
NB, ON UPDATE CASCADE est probablement une mauvaise idée si vous l'utilisez pour lier une clé primaire, car elle devrait être immuable et s'appuyer sur cette base de données suggérée pourrait nécessiter une refonte, mais je suppose que si vous la liez avec une clé étrangère unique, mais pas primaire, c'est OK. – ThinkBonobo