2010-12-17 14 views
0

Sehr geehrte, ich habe ein Problem in MySQL: Ich konnte DELETE FROM users where user_id ='1'; in der MySQL CLI nicht ausführen. Also habe ich versucht, in der phpMyAdmin: die GUI Verwenden Sie eine Zeile zu löschen, ich habe dies:Kann eine Zeile in der Tabelle nicht löschen (MySQL)

SQL-Abfrage:

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

MySQL sagte: Dokumentation

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`)) 

ich dies sah Fehler in der Mysql-Website und bekam: Fehler: 1451 SQLSTATE: 23000 (ER_ROW_IS_REFERENCED_2)

Nachricht: Kann nicht de lette oder aktualisiere eine Elternreihe: eine Fremdschlüsselbeschränkung scheitert (% s)

Ich weiß nicht, was hier falsch ist, hoffe, dass jemand mir einen Heads-up geben kann.

Viele thx!

Antwort

6

Sie haben einen Arzt, der diesen Benutzer durch einen Fremdschlüssel mit on delete no action oder on delete restrict referenziert. Ändern Sie den Fremdschlüssel entweder auf on delete set null (wodurch die Benutzer-ID des verweisenden Arztes auf null gesetzt wird) oder on delete cascade (wodurch der Arzt zusammen mit dem Benutzer gelöscht wird) oder weisen Sie den Arzt einem anderen Benutzer zu und führen Sie die Abfrage erneut aus.

+0

Vielen Dank. Jetzt ist mein Problem gelöst !! VIELEN DANK!!! – manxing

1

Es gibt eine andere Tabelle, die diesen Benutzer verwendet (mit user_id von 1) und diese Zeile muss gelöscht werden, bevor Sie den Benutzer aus der users-Tabelle entfernen können.

+0

ich tippe ich nicht hätte wissen müssen, schnell genug, um diese Antwort zu erhalten: P – Shaded

1

Sie haben eine Tabelle (Ärzte nehme ich an), die diese Zeile mit einer Fremdschlüsseleinschränkung referenziert. Sie müssten den Arzt zuerst löschen, um den Benutzer zu löschen. Oder fügen Sie der Fremdschlüsseleinschränkung eine On-Delete-Kaskade hinzu.

0

Dies bedeutet, dass eine andere Tabelle einen Fremdschlüssel-Link zu diesem hat. Sie können den Benutzer mit der ID 1 nicht löschen, da eine andere Tabelle auf diesen Benutzer verweist.

1

Der Fehler gibt Ihnen die Antwort. Zwischen der Tabelle, aus der Sie löschen möchten, und einer anderen Tabelle besteht eine referenzielle Integritätsverknüpfung. Es wurde eine Einschränkung erstellt, um sicherzustellen, dass Sie die Elternzeile nicht versehentlich löschen, um verwaiste Personen zurückzulassen.

Wenn ein Arzt immer ein Benutzer ist. Dann können Sie den Benutzer nicht löschen, wenn Sie eine Gruppe von Ärzten ohne Benutzerdaten hinterlassen.

0

Der Grund ist, dass Sie bereits einen Fremdschlüssel ('users_ibfk_2') erstellt haben, der auf ein Feld ('user_id') in der Tabelle verweist, aus der Sie eine Zeile löschen möchten. aber wie Sie ein Fremdschlüssel erstellt haben, um den Fremdschlüssel zu entfernen ist keine gute Lösung, so eine bessere Lösung ist (wenn Sie mit phpMyAdmin):

  1. wählen Sie das Kind Tabelle
  2. select ' Structure‘tab
  3. gehen zu 'Relation view'
  4. Änderung der zweiten Auswahlliste (ON DELETE) [in der Zeile entsprechend 'doctor_id'] zu 'CASCADE'

nun deleti Wenn Sie eine Zeile in Ihrer Elterntabelle löschen, wird die entsprechende Zeile in der Kindtabelle gelöscht.

, wenn Sie nicht mit phpMyAdmin sind:

  1. den Fremdschlüssel
  2. fallt einen neuen Fremdschlüssel hinzufügen mit ON Kaskade referenziellen Aktion DELETE statt
Verwandte Themen