mysql - 薛定谔 MySQL 表 : exists, 但它没有

标签 mysql

我遇到了最奇怪的错误。

有时,在创建或更改表时,我会收到“表已存在”错误。但是,DROP TABLE 返回“#1051 - 未知表”。所以我得到了一个无法创建、无法删除的表。

当我尝试删除数据库时,mysqld 崩溃了。有时它有助于创建另一个具有不同名称的数据库,有时则不然。

我使用的数据库有大约 50 个表,全部是 InnoDB。不同的表都会出现此问题。

我在 Windows、Fedora 和 Ubuntu、MySQL 5.1 和 5.5 上经历过这种情况。使用 PDO、PHPMyAdmin 或命令行时,行为相同。我使用 MySQL Workbench 来管理我的架构 - 我看到了一些相关错误(结束线和其他内容),但它们都与我无关。

不,它不是 View ,而是表。所有名称均为小写。

我尝试了谷歌搜索到的所有方法 - 刷新表,将 .frm 文件从一个数据库移动到另一个数据库,读取 mysql 日志,除了重新安装整个该死的东西之外没有任何帮助。

“显示表”什么也没显示,“描述”表说“表不存在”,没有 .frm 文件,但“创建表”仍然以错误结束(“如果不存在则创建表”也是如此) ') 并且删除数据库会使 mysql 崩溃

相关但无用的问题:

编辑:

mysql> use askyou;
Database changed

mysql> show tables;
Empty set (0.00 sec)

mysql> create table users_has_friends (id int primary key);
ERROR 1050 (42S01): Table '`askyou`.`users_has_friends`' already exists

mysql> drop table users_has_friends;
ERROR 1051 (42S02): Unknown table 'users_has_friends'

同样,表不存在,但无法创建;

mysql> drop database askyou;
ERROR 2013 (HY000): Lost connection to MySQL server during query

名称更改,这不是我遇到问题的唯一表/数据库

最佳答案

当数据目录中缺少数据文件但表定义文件存在时,我遇到过此问题,反之亦然。如果您使用的是 innodb_file_per_table,请检查数据目录以确保您拥有相关表的 .frm 文件和 .ibd 文件。如果是MYISAM,应该有一个.frm.MYI和一个.MYD文件。

通常可以通过手动删除孤立文件来解决该问题。

关于mysql - 薛定谔 MySQL 表 : exists, 但它没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42083499/

相关文章:

mysql - 使用 oracle 将 sysdate 与 iso 8601 进行比较

mysql - 无法创建表(错误号 : 150) while trying to create a new table

一旦我添加 'echo' 并从表中获取一些内容,PHP (MySQL) 脚本就不会读取任何其他内容

mysql - 索引此 sql 查询以获得最佳优化

mysql - 查询具有特定值的最新记录的计数

mysql - 查找具有不同值的重复记录

mysql - SQL 脚本中的变量数据库名称

php - 无法在 PHP 中使用 Get 方法

mysql - 如何处理数据以避免 MySQL "incorrect string value"错误?

php - 如何在laravel的 Blade 文件中显示最新的('updated_at')记录