我更改了MySQL安装的datadir,所有的基都正确移动,除了一个。 我可以连接和使用数据库。SHOW TABLES还正确地返回所有表,并且每个表的文件都存在于MySQL数据目录中。

然而,当我试图从表中选择某些东西时,我得到一个错误消息,该表不存在。然而,这没有意义,因为我能够通过show TABLES语句显示同一个表。

我的猜测是SHOW TABLES列出了文件的存在,但不检查文件是否损坏。因此,我可以列出这些文件,但不能访问它们。

然而,这只是一种猜测。我以前从未见过这个。现在,我无法重新启动数据库进行测试,但使用它的其他所有应用程序都运行正常。 但这只是猜测,我从来没见过。

有人知道为什么会这样吗?

例子:

mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database    |
+-----------------------+
| TABLE_ONE             |
| TABLE_TWO             |
| TABLE_THREE           |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist

当前回答

另一个我认为值得在这里提出的答案(因为我带着同样的问题来到这里,而这对我来说就是答案):

再次检查查询中的表名是否与数据库中的表名拼写完全相同。

这是一个很明显的,新手的事情,但是像“user”和“users”这样的东西会让人出错,我认为在这里列出这个答案会很有帮助。:)

其他回答

在我的情况下,当我导入导出的sql文件时,我得到了一个错误,比如创建表查询的表不存在。

我意识到在我的数据库名中有一个下划线,mysql在这之前放了一个转义字符。

所以我删除了数据库名称中的下划线,一切都解决了。

希望这也能帮助到其他人。

我的桌子不知何故被重新命名为“客户”,即有一个领先的空间

这意味着

解析:答案为A。

b)桌子没有按字母顺序出现在我所期望的位置,这在我的恐慌中意味着我看不到它!

RENAME TABLE ` Customer` TO `Customer`;

停止mysqld 备份mysql文件夹:cp -a /var/lib/mysql /var/lib/mysql- Backup 从旧机器复制数据库文件夹到/var/lib/mysql 从旧数据库覆盖ib* (ib_logfile*, ibdata) 开始mysqld 转储确保 , mysqldump > dbase.mysql 停止mysql服务 删除/var/lib/mysql 重命名/var/lib/mysql-backup为/var/lib/mysql 开始mysqld 创建数据库 Mysqldump < dbbase .mysql

转到:xampp\mysql\data\dbname 在dbname中有tablename.frm和tablename.frm。ibd文件。删除它 并重新启动mysql,再试一次。

我不知道原因,但在我的情况下,我解决了只是禁用和启用外键检查

SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=1;