我收到以下错误消息:

第40行出现错误1217(23000):无法

... 当我试图放下桌子时:

DROP TABLE IF EXISTS `area`;

... 定义如下:

CREATE TABLE `area` (
  `area_id` char(3) COLLATE utf8_spanish_ci NOT NULL,
  `nombre_area` varchar(30) COLLATE utf8_spanish_ci NOT NULL,
  `descripcion_area` varchar(100) COLLATE utf8_spanish_ci NOT NULL,
  PRIMARY KEY (`area_id`),
  UNIQUE KEY `nombre_area_UNIQUE` (`nombre_area`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

有趣的是,模式中的I already dropped all other tablesarea之间有外键.实际上,除了area表之外,数据库是空的.

如果数据库中没有任何其他对象,它怎么可能有子行呢?据我所知,InnoDB不允许在其他模式上使用外键,是吗?

(我甚至可以运行RENAME TABLE area TO something_else命令:-?)

推荐答案

两种可能性:

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

在删除失败后,通过执行"SHOW ENGINE INNODB STATUS"(显示引擎INNODB状态),您可以看到它是哪一个表(无论如何是其中的一个).

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

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

Mysql相关问答推荐

棱镜一对多关系在数据库中不可见,并且连接选项不起作用

将具有多个结果的表连接为新列?

如何将MySQL与AS&Quot;语法一起用于存储过程返回的表?

JOOQ-如何在一个查询中引用多个(但不是所有)表中的所有字段

用于将具有多个状态更改日期列的单行转换为具有状态和时间戳的多行的SQL查询

运行简单查询时Prisma预准备语句错误

使用字符串文字与使用日期文字时的SQL行为

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

使用不同的 where 列进行子 Select

避免多个SQL查询的重构代码

如何用sql找出两次之间的差异

如何更新一个巨大的表的 50k 行?

从 2 个不同的表中获取数据并将它们加入 sql

是否可以从 .SQL 文件中计算表中的行数?

避免重复进入mysql数据库的最佳方法

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

如何使用 SQL 数据库中的经纬度查找最近的位置?

我的 PDO 声明不起作用

如何让mysql自动启动? (仅限 linux-cli)

考虑到 NodeJS,MySQL 和 MySQL2 有什么区别