1

问题陈述:我想在数据库中删除一些表。

错误获取:外键约束失败

细节:

我有一个预先存在的(不是由 django models.py 填充的)数据库。我正在使用 django。我使用这个数据库来创建 django 站点。在 django 中创建站点时,我已经给出了它的名称和正确的设置。在 models.py 中没有创建模型。

执行命令后:

python manage.py syncdb

Django 在该数据库中添加了以下表格:

| auth_group |

| auth_group_permissions |

| auth_permission |

| 身份验证用户 |

| auth_user_groups |

| auth_user_user_permissions |

| django_content_type |

| django_session |

| django_site |

我想删除所有这些表。

我试过这个查询;

删除表表名;

但是mysql提示错误显示:

ERROR 1217 (23000):无法删除或更新父行:外键约束失败

有什么方法可以让我只删除上面提到的表格,保持我预先存在的表格完整吗?

谢谢你。

4

2 回答 2

2

两种可能:

  1. 在另一个模式(mysql 术语中的“数据库”)中有一个表,它有一个 FK 引用
  2. innodb 内部数据字典与 mysql 不同步。

您可以通过在删除失败后执行“SHOW ENGINE INNODB STATUS”来查看它是哪个表(无论如何是其中一个)。

如果结果是后一种情况,如果可以的话,我会转储并恢复整个服务器。

MySQL 5.1 及更高版本将在错误消息中为您提供带有 FK 的表的名称。

也试试这个

请参考这个问题stackoverflow

禁用外键检查

DISABLE KEYS

请确保SET FOREIGN_KEY_CHECKS=1;

于 2012-11-08T06:31:25.173 回答
0

您可以轻松配置 django 以使用 MyISAM,而不是使用默认的 innodb 存储引擎。在后一种情况下,它不会因为关系而限制您执行各种操作。两者都有其积极和消极的观点。

于 2012-11-08T07:58:57.377 回答