2016-06-14 292 views
-1

对于一些未知的原因中,“INFORMATION_SCHEMA.TABLES”的信息不符合实际的表:由MySQL困惑INFORMATION_SCHEMA.TABLES信息

首先,找到INFORMATION_SCHEMA.TABLES表名,有一个结果; 然后,从表名选择*,它显示表不存在! /(ㄒoㄒ)/ ~~

我试着用同样的名字创建一个新表(MyISAM引擎),它创建OK! 然后,从information_schema.tables中找到表名,有两个结果! 而选择*从表名显示空集,这是正常的。

到现在为止,表可以使用,但不能完全删除。 如果删除表,则返回“第一个”。

如下图: all the step

我寻找了很久净。但没用。请帮助或尝试给出一些想法如何实现这一点......

+0

你可以尝试直接插入图像的问题,不是每个人都遵循链接.. –

+0

谢谢你的建议,但我没有足够的声誉直接插入图像(我认为是这样)... /(ㄒ oㄒ)/ ~~ @StefanHegny –

+0

http://dev.mysql.com/doc/refman/5.7/en/database-use.html – GhostGambler

回答

1

图片显示没有任何错误的我。当您运行此:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE 
TABLE_NAME = 'report_instance_performance_20160614 

,并得到一个结果,你可能得到一个结果,该名称的表从那里你跑了查询不同的模式。这将是更有益的运行这看看是否有错:

SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE 
TABLE_NAME = 'report_instance_performance_20160614' 

我的说法,该表在其他模式存在,但不是一个,你在从查询运行的是,你得到当您尝试时出现doesn't exist错误,并从中出现SELECT

接下来,当您创建该表的新实例,然后运行INFORMATION_SCHEMA.TABLES查询时,您将得到两个结果,因为您现在在当前模式中创建了具有该名称的表。如果该表已存在于您当前的模式中,那么您将得到一个错误,即该模式中已存在该名称的表。这进一步支持了我的断言report_instance_performance_20160614存在于不同的模式中。

最后,由于表格是新创建的,并且您没有在SELECT之前将任何东西写入表格,所以表格将为空是完全正常的。

+0

是的......你是对的。还有另一种模式...非常感谢你!对于这个问题,我非常抱歉,由于我的MySQL知识有限,对“INFORMATION_SCHEMA.TABLES”的理解还不够彻底...... –

+0

您可以将答案标记为正确,然后帮助其他人来看看此问题:) –