2012-03-27 6 views
1

外部キーの参照を変更してフィールドの名前を変更しましたが、同じフィールドの2つの制約が異なるテーブルを指しています。 、Djangoを使用した外部キ​​ーの移行

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

どのように私は明らかに、この古い参照を削除する必要があります: 私のモデルは、この

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

ようなものだったと

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

そして、私のテストを実行するときに、今、私はこのメッセージを得るになりました南はそれをスキップした。

答えて

-1
  1. だけちょっとみかんのデータベースであることに起因する。このようなinnane問題を作成するMySQLのような悪いのデータベースの使用を停止(ごめん抵抗することができませんでしたが、それは本当だ)mysqlのドキュメントからストレート
  2. ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
+0

なぜあなたはMySQLが悪いと思いますか? – Andrew

+1

ACIDは、デフォルトで、実際に吹き飛ぶ、No ForeignKey制約、トランザクションなし、1k以上のフィールドのインデックス化ができません(これはとにかくデザインが悪いと主張できますが、 EXPLAIN ANALYZEの実装なし、スキーマ変更コマンド中のトランザクションなし、クエリはテーブルごとにクエリごとに1つのインデックスのみを使用します(インデックスはその場で組み合わせるのではなく、多列インデックスを大量に使用します)。私はいくつかの時間を過ごすともっと考えることができると確信しています。基本的に私は毎週何か新しいものを見つける – John

+1

明らかに、これらのうちのいくつか(fkのものもトランザクションもない)がinnodb可能性があります。あなたがMyISAMにスワップしなければならない少しのパフォーマンスを得るために、早く遊びたいならば、InnoDBはデフォルトでなければなりません。 MySQL IMOに関して本当に良いのは、これが最初に広く採用されたオープンソースのDBであり、Webに多くのオプションを開いたことだけです。 PHPについても同様のことが言えるでしょう。多くの人がPHPが素晴らしいツールであると主張するとは思いません。 – John

0

同じ移行で他のものを更新しましたか?彼らは働いたか、壊れましたか?私はマイグレーションを実行するときにSouthを何も破壊していないので尋ねるだけです。何か問題があれば、通常はそのプロセス中に例外が発生します。

+1

彼はmysqlの特質を扱っている可能性が最も高いです。私はこれまでに、1つのテーブルがmyISAMであり、もう1つのテーブルがInnoDBであったのです。 South/djangoは、myISAMが外部キーをサポートしていないので、もちろん失敗した制約を作成しました。正確にそのパスに終わる方法を確信していないが、私は前に正確な問題を見た。 – John

+0

それは...ちょっとナッツ。 – Todd

+0

私の最初の提案は、ガベージデータベースを削除し、それほど吸わないものに移動することです。これは、mysqlを使用する際の多くの問題の1つにすぎません – John

関連する問題