我有几个MRG_MyISAM表,它们在MySQL数据库中合并了许多其他表。我想以编程方式弄清楚每个合并表中包含哪些表。
我知道我可以运行SHOW CREATE TABLE
,然后解析语句的UNION=(tbl1, tbl2)
部分,但这看起来有点像hacky。还有更好的方法吗?
在一个理想的世界里,我正在寻找这样的东西:
SELECT * FROM ?? WHERE merge_table = 'merge_table_1'
这将返回每行包含“merge_table_1”中包含的表名称的行:
--------------
| table_name |
--------------
| tbl1 |
--------------
| tbl2 |
--------------
答案 0 :(得分:1)
我认为INFORMATION_SCHEMA
中没有任何数据可以列出MERGE表的成员。
如果您的应用程序可以直接访问数据库服务器上的数据目录,则只需阅读合并表的.MRG
文件即可。它是一个人类可读的文件,只是简单地列出合并中的表,以及任何其他合并表选项。
你真的不应该再使用MERGE表了。您应该使用MySQL的PARTITIONING引擎,它更加灵活。使用分区表,您可以查询INFORMATION_SCHEMA.PARTITIONS
表以查找有关每个分区的信息。
实际上,您也不应该使用MyISAM表。 InnoDB更具可扩展性,MyISAM不支持ACID的任何属性。
答案 1 :(得分:0)
SHOW CREATE TABLE table_name;
- 看看这是否为您提供了信息