2016-05-30 3 views
1

Ich muss eine Zeile aus einer Tabelle löschen. Ich erhalte einen Fehler 1451, der bedeutet, dass eine Einschränkung fehlgeschlagen ist. Aber wenn ich versuche, diese Beziehung zu finden, kommt nichts auf.Mysql Fehler 1451, aber keine Zeile mit referenzierter ID gefunden werden

mysql> delete from A where id=961; 
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key 
    constraint fails (`xxx`.`B`, CONSTRAINT `FK_D273C62CBE4E457A` FOREIGN KEY 
    (`agencementDimension_id`) REFERENCES `A` (`id`)) 
mysql> select * from B where agencementDimension_id=961; 
Empty set (0.00 sec) 

Constraints hatte 2. durch Lehre + Symfony erzeugt worden sind I „Kaskade löschen“ und aktualisiert Schema aber nichts geändert „Das Datenbankschema mit den Mapping-Dateien ist in sync“ hinzugefügt.

+0

versuchen, untergeordnete Zeilen zu löschen, die mit ID = 961 verbunden sind –

+1

Das nächste Mal, wenn Sie Beziehung herstellen, und wenn Sie diese Typanforderung verwenden, verwenden Sie DELETE CASCADE beim Erstellen der Einschränkung –

Antwort

0

Mit Symfony 2 und Lehre 2, fügte ich ON DELETE CASCADE dank der JoinColumn onDelete Eigenschaft der Einschränkung automatisch löschen:

* @ORM\JoinColumn(name="agencementDimension_id", referencedColumnName="id", onDelete="CASCADE") 

, dass die geänderte MySQL-Fehlermeldung an:

mysql> delete from A where id=961; 
ERROR 1451 (23000): Cannot delete or update a parent row: 
a foreign key constraint fails (`xxx`.`C`, CONSTRAINT `FK_BF92805FD55A3663` 
FOREIGN (`agencementVersionDimension_id`) REFERENCES `B` (`id`)) 

hatte ich eine zweite Beziehung zwischen B und C. ich weiß nicht, warum MySQL hat mir nicht gesagt, dass von Anfang an. Wie auch immer, ich konnte die Zeilen von C löschen, wodurch ich Zeilen aus A löschen konnte!

1

dieses Problem ON DELETE CASCADE ADD Um zu vermeiden, in Ihrem contraint

hier ein Beitrag zeigt, wie es in symfony Lehre

On delete cascade with doctrine2

+0

Ich verwende Symfony + -Doktrin zum Generieren von Schema und Anforderung, Ich möchte nicht mit automatisch generierten Einschränkungen umgehen:/ – Shakealot

+0

Durch Hinzufügen von "onDelete = CASCADE", mysql Fehlermeldung geändert und ich bemerkte, ich hatte eine dritte Tabelle, ein Kind des Kindes! Das war das Problem, ich habe "onDelete = CASCADE" auch auf der zweiten Relation hinzugefügt und es hat den Trick gemacht! Vielen Dank ! Muss ich eine Nachricht mit der Lösung erstellen und sie als aufgelöst markieren? – Shakealot

+0

Sie sind herzlich willkommen! Sie können Ihre eigene Frage beantworten –

0

Dieser Fehler sagt zu tun, dass Sie Tabelle A mit Feldnamen haben ' id 'und die irgendwo als Referenz für das Feld "agencementDimension_id" verwendet wird, so dass Sie diesen Datensatz nicht löschen können

Sie müssen entweder alle untergeordneten Zeilen löschen, um diese reco zu löschen rd oder Sie können durch das Setzen ON DELETE CASCADE Eigenschaft auf Fremdschlüssel constrain

+0

Wenn Sie auf meine zweite Anfrage schauen, habe ich kein Kind gefunden. Das macht mich misstrauisch. – Shakealot

+0

Überprüfen und befolgen Sie die hier bereitgestellte Antwort http://stackoverflow.com/questions/14257004/doctrine2-symfony2-cascading-remove-integrity-constraint-violation-1451 http://stackoverflow.com/questions/8487042/symfony2- documentfixturesbundle-cant-load-features-due-to-fremdschlüssel-constrance Ich denke, dass jede von diesen Ihr Problem lösen sollte – Rupal

Verwandte Themen