2010-12-17 2 views
0

Bonjour à tous, J'ai un problème avec MySQL: J'ai échoué à exécuter DELETE FROM users where user_id ='1'; dans la CLI de MySQL. donc j'ai essayé dans le phpMyAdmin: Utilisez l'interface graphique pour supprimer une ligne, je suis arrivé ceci:Impossible de supprimer une ligne dans la table (MySQL)

requête SQL:

DELETE FROM `health_portal`.`users` WHERE `users`.`user_id` =1 

MySQL dit: Documentation

Cannot delete or update a parent row: a foreign key constraint fails (`health_portal`.`users`, CONSTRAINT `users_ibfk_2` FOREIGN KEY (`doctor_id`) REFERENCES `users` (`user_id`)) 

je regardais cette erreur dans le site Web Mysql et a obtenu: Erreur: 1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2)

Message: Impossible de Lete ou mettre à jour une ligne parent: une contrainte de clé étrangère échoue (% s)

Je ne sais pas ce qui ne va pas ici, espérons que quelqu'un peut me donner un heads-up.

Beaucoup de thx!

Répondre

6

Vous avez un médecin qui référence cet utilisateur via une clé étrangère avec on delete no action ou on delete restrict. Modifiez la clé étrangère à on delete set null (qui fixe le user_id du médecin de référence null) ou on delete cascade (qui supprime le médecin ainsi que l'utilisateur) ou affecter manuellement le médecin à un autre utilisateur, puis ré-exécuter votre requête.

+0

Merci beaucoup. Maintenant mon problème est résolu !! MERCI!!! – manxing

1

Il y a une autre table qui utilise cet utilisateur (avec user_id de 1) et cette ligne doit être supprimé avant de pouvoir supprimer l'utilisateur de la table des utilisateurs.

+0

j'aurais su que je ne tapez pas assez rapidement pour obtenir cette réponse: P – Shaded

1

Vous avez une table (médecins, je suppose) qui fait référence à cette ligne avec une contrainte de clé étrangère. Vous devez d'abord supprimer le médecin afin de supprimer l'utilisateur. Ou bien ajoutez une cascade de suppression à la contrainte de clé étrangère.

0

Cela signifie qu'une autre table a un lien clé étrangère à celle-ci. Vous ne pouvez pas supprimer l'utilisateur avec l'ID 1 car une autre table référence cet utilisateur.

1

L'erreur vous donne la réponse. Il existe un lien d'intégrité référentielle entre la table que vous essayez de supprimer et une autre table. Une contrainte a été créée pour vous assurer de ne pas supprimer accidentellement la ligne parente laissant les orphelins derrière.

Si un médecin est toujours un utilisateur. Ensuite, vous ne pouvez pas supprimer l'utilisateur laissant derrière lui un groupe de médecins sans dossier d'utilisateur.

0

La raison en est que vous avez déjà créé une clé étrangère ('users_ibfk_2') qui référence un fichier ('user_id') dans la table dont vous voulez supprimer une ligne. mais comme vous avez créé une clé étrangère supprimant ainsi la clé étrangère n'est pas une bonne solution, donc une meilleure solution est (si vous utilisez phpmyadmin):

  1. sélectionnez la table enfant
  2. select ' Structure » onglet
  3. aller à la 'vue Relation'
  4. de changement de la deuxième liste déroulante (ON SUPPRIMER) [dans la ligne correspondant à 'doctor_id'] à 'CASCADE'

maintenant par deleti Dans une ligne de votre table parent, la ligne correspondante de la table enfant sera supprimée.

si vous ne l'utilisez phpmyadmin:

  1. Laisser tomber la clé étrangère
  2. ajouter une nouvelle clé ON DELETE action référentielle en cascade à la place
Questions connexes