Comment puis-je supprimer des lignes dupliquées d'une table MySQL lorsqu'une relation de clé étrangère a déjà été configurée sur ces lignes.
Les doublons peuvent-ils être fusionnés d'une certaine manière, puis la clé étrangère mise à jour avec la nouvelle valeur?Supprimer les lignes dupliquées dans la table MySQL mais la relation de clé étrangère existe?
Répondre
Si la clé étrangère est ON DELETE CASCADE
, puis en supprimant les lignes en double également supprimer les lignes dépendantes, par exemple, si vous avez une table customers
et une table orders
, et une clé étrangère comme ALTER TABLE orders ADD FOREIGN KEY customer_id REFERENCES customers (id) ON DELETE CASCADE
, puis en supprimant un client supprimera également les commandes de ce client. De même, si la clé étrangère a ON DELETE SET NULL
, les commandes ne seront pas supprimées, mais leurs valeurs customer_id
seront définies sur NULL. Si aucun de ces comportements n'est souhaité, créez une requête résolvant les conflits de clé étrangère en modifiant les colonnes de clé étrangère afin qu'elles référencent la ligne que vous souhaitez conserver (par exemple, mettre à jour toutes les commandes pour référencer les clients non dupliqués).), puis supprimez les lignes incriminées. Une autre alternative consiste à désactiver temporairement les contrôles de clé étrangère, mais cela vous laissera une base de données incohérente, donc je ne le recommanderais pas.
Pourrais-je utiliser ON DELETE SET NULL pour définir toutes les colonnes de clé étrangère qui ont été liées à des doublons à NULL, puis les mettre à jour dans un script à l'ID directement au-dessus? – chustar
"directement au-dessus" n'est pas exactement une construction SQL valide. Un enregistrement dans une base de données SQL n'a aucune connaissance de ce qui précède ou vient après dans la table de données. "before" et "after" sont imposés par l'opérateur (pensez-y comme la différence entre 'sort asc' et' sort desc'). –
Vous pouvez utiliser une table temporaire pour stocker la relation entre les lignes que vous allez supprimer et la ligne correspondante que vous souhaitez conserver, par ex. 'CREATE TABLE client_duplicates (duplicate_id, original_id);' avec des FK pour les clients en double et originaux. Décidez quels clients vous souhaitez conserver et quels sont les doublons, remplissez le tableau des doublons en conséquence. Ensuite, mettez à jour la table des commandes afin que chaque commande référençant un client en double référence maintenant le client d'origine. Enfin, supprimez les clients en double et supprimez la table des doublons. – tdammers
- 1. comment supprimer les lignes dupliquées d'une table dans mysql
- 2. MySQL: Insérer si la clé étrangère existe
- 3. Entity Framework 4 ste supprimer la relation de clé étrangère
- 4. MySQL tentant de supprimer toutes les lignes qui ne sont pas contraints par la clé étrangère
- 5. Comment représenter "ALL" dans la relation clé primaire-clé étrangère
- 6. Insérer un groupe de lignes dupliquées dans une table mysql
- 7. Supprimer les lignes dupliquées en fonction de la condition
- 8. contraintes de clé étrangère mysql
- 9. la création de deux lignes en même temps avec une relation clé étrangère
- 10. Problème de clé étrangère MySQL
- 11. mysql delete et la contrainte de clé étrangère
- 12. Spécification de la clé étrangère dans une relation has_many: through
- 13. Clé étrangère SQL supprimer la cascade
- 14. Supprimer les lignes répétées de la table MySQL
- 15. Création d'une clé étrangère MySQL avec la commande alter table
- 16. doute clé étrangère dans MYSQL
- 17. Est-il possible de supprimer toutes les contraintes de clé étrangère sur une table à la fois dans mySQL 5?
- 18. Utilisation de la relation/clé étrangère avec linq2sql?
- 19. clé étrangère et la relation n à n
- 20. concept de clé étrangère mysql
- 21. clé étrangère à la table utilisateur dans django
- 22. Requête SQL: relation de clé étrangère autoréférencée
- 23. Pas de lignes dupliquées, mais des données redondantes
- 24. MySQL change le type de clé étrangère
- 25. Alter Sql table (Changer la clé étrangère au deuxième primaire de la table)
- 26. Contraintes de clé étrangère MySQL, cascade delete
- 27. MySQL clé étrangère à une autre clé étrangère
- 28. besoin d'aide dans la clé primaire et la clé étrangère
- 29. EF ne génère pas d'association de clé étrangère à partir d'une clé étrangère dans la table
- 30. Sélection de toutes les lignes dont la clé étrangère pointe vers une clé primaire spécifique?
Voulez-vous dire: les lignes qui sont des doublons * sauf * pour la clé primaire? – egrunin
Oui, sauf la clé primaire et une autre colonne que je vais supprimer de la table. – chustar