1

問題の説明:データベースにいくつかのテーブルを削除したい。

取得エラー:外部キー制約が失敗する

詳細:

既存の(djangomodels.pyによって入力されていない)データベースがあります。私はdjangoを使用しています。このデータベースを使ってdjangoサイトを作成しました。djangoでサイトを作成するときに、その名前と適切な設定を指定しました。models.pyに作成されたモデルはありません。

コマンド実行後:

python manage.py syncdb

Djangoは、そのデータベースに次のテーブルを追加しました。

| auth_group |

| auth_group_permissions |

| auth_permission |

| auth_user |

| auth_user_groups |

| auth_user_user_permissions |

| django_content_type |

| django_session |

| django_site |

これらのテーブルをすべて削除したいと思います。

このクエリを試しました。

DROP TABLE table_name;

しかし、mysqlは次のエラーを表示してプロンプトを表示しました:

エラー1217(23000):親行を削除または更新できません:外部キー制約が失敗します

上記のテーブルのみを削除して、既存のテーブルをそのまま維持する方法はありますか?

ありがとうございました。

4

2 に答える 2

2

2つの可能性:

  1. FK参照を持つ別のスキーマ(mysql用語では「データベース」)内にテーブルがあります
  2. innodb内部データディクショナリがmysqlのものと同期していません。

ドロップが失敗した後に「SHOWENGINEINNODBSTATUS」を実行すると、それがどのテーブルであったか(とにかくそのうちの1つ)を確認できます。

後者の場合は、可能であればサーバー全体をダンプして復元します。

MySQL 5.1以降では、エラーメッセージにFKが含まれるテーブルの名前が表示されます。

これも試してみてください

この質問を参照してくださいstackoverflow

外部キーチェックを無効にする

DISABLE KEYS

必ずしてくださいSET FOREIGN_KEY_CHECKS=1;

于 2012-11-08T06:31:25.173 に答える
0

デフォルトのinnodbストレージエンジンを使用する代わりに、MyISAMを使用するようにdjangoを簡単に構成できます。後者の場合、関係のためにさまざまな操作を実行することを制限することはありません。どちらにも長所と短所があります。

于 2012-11-08T07:58:57.377 に答える