2012-03-27 27 views
1

Ich änderte die Referenz eines Fremdschlüssels ohne den Namen des Feldes zu ändern, jetzt habe ich 2 Einschränkungen für den gleichen Feldpunkt auf verschiedene Tabellen. Mein Modell war wie diesesFremdschlüssel Migration mit Django Süden

class Activity(models.Model): 
    ... 
    source = models.ForeignKey(FSObject) 

und wurde

class Activity(models.Model): 
    ... 
    source = models.ForeignKey(FreezedRef) 

Und jetzt habe ich diese Nachricht bekommen, wenn meine Tests ausführen:

IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_tcf_api`.`storage_activity`, CONSTRAINT `source_id_refs_id_fc96b4b044ceb88` FOREIGN KEY (`source_id`) REFERENCES `storage_fsobject` (`id`))') 

Wie soll ich dieses alte Referenz löschen, offenbar, South hat es ausgelassen.

Antwort

-1
  1. Stopp mit schlechten Datenbanken wie MySQL, die innane Probleme wie diese auf ein ordnungsgemäßes erstellen nur ein bisschen sorta Datenbank sein (sorry konnte nicht widerstehen, aber es ist wahr)
  2. ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol; Gerade von den MySQL-docs: http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
+0

Warum denken Sie, MySQL ist schlecht? – Andrew

+1

Es ist nicht Remote ACID-konform in der Weise, die wirklich blasen, keine ForeignKey-Einschränkungen, keine Transaktionen, Indexfelder nicht über 1k (Sie können argumentieren, dies wäre schlecht Design, aber immer noch das ist nur 300 Unicode-Zeichen), nicht indexieren Funktionsresultate, keine Implementierung von EXPLAIN ANALYZE, keine Transaktionen während Schema-Änderungsbefehlen, Abfragen verwenden nur einen Index pro Abfrage pro Tabelle (erzwingt die Verwendung einer Tonne mehrspaltiger Indizes, anstatt Indexe im laufenden Betrieb zu kombinieren). Ich bin sicher, ich könnte mehr denken, wenn ich etwas Zeit verbringen würde, im Grunde finde ich jede Woche etwas neues – John

+1

Offensichtlich merke ich, dass ein paar (keine fk's und keine Transaktionen) von diesen mit innodb geholfen werden konnte, die meisten konnten nicht aber einige könnte. InnoDB sollte der Standard sein, wenn Sie schnell und locker spielen möchten, um etwas Leistung zu erhalten, die Sie zu MyISAM wechseln sollten, nicht umgekehrt. Das Einzige, was wirklich gut ist an MySQL IMO ist, dass es die erste weit verbreitete Open-Source-DB war und viele Möglichkeiten für das Web eröffnet hat. Etwas ähnliches kann über PHP gesagt werden und ich denke nicht, dass viele Leute argumentieren würden, dass PHP erstaunlich ist oder das beste Werkzeug. – John

0

Haben Sie in der gleichen Migration noch etwas aktualisiert? Haben sie gearbeitet oder gebrochen? Ich frage nur, weil ich noch nie etwas kaputt gemacht habe, wenn ich eine Migration durchführe - es wird normalerweise eine Ausnahme auslösen, wenn etwas nicht stimmt.

+1

Er ist höchstwahrscheinlich mit einer Idiosynkrasie in MySQL konfrontiert. Ich bin schon einmal darauf gestoßen, wo ein Tisch myISAM war und ein anderer InnoDB. South/django hat das Contraint erstellt, was natürlich fehlschlägt, da myISAM keine Fremdschlüssel unterstützt. Ich weiß nicht genau, wie ich auf diesem Pfad landen soll, aber ich habe das genaue Problem schon einmal gesehen. – John

+0

Das ist ... irgendwie verrückt. – Todd

+0

Daher mein erster Vorschlag, die Müll-Datenbank fallen zu lassen und zu etwas zu bewegen, das nicht so viel lutscht. Dies ist nur eines der vielen Probleme bei der Verwendung von mysql – John

Verwandte Themen