我正在使用 MySQL 5.7 学习 SQL。 我想枚举所有表,包括临时表!
但是当我查询SHOW TABLES时;它仅显示非临时表。
如何列出所有表格?
我还没有找到这个问题的直接答案 - 据我所知,没有办法(当前是 MySQL 8.0.31)列出连接上的所有临时表。
您可以使用以下方法测试表是否存在:
SELECT 1 FROM my_table WHERE 0;
如果没有收到错误,则表以某种形式存在(TEMPORARY、BASE TABLE 或 VIEW)。 要检查它是否是临时的,您可以使用:
SHOW TABLES IN my_db
WHERE Tables_in_my_db = "my_table"
(如果存在且不是临时的,则返回表名称,或者也使用“FULL TABLES”返回表类型) 或
SELECT table_type
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = "my_db" AND TABLE_NAME = "my_table";
(如果存在且不是临时表,则返回表类型)
因此,如果第一个测试未返回错误,但未使用其他测试之一列出该表,则该表是临时的。
这无助于枚举临时表(我相信这是可以完成的 - 请参阅其他答案 - 如果表是 INNODB 但通常不适用于 MyISAM),但它确实使您能够将表识别为临时表或其他表如果你知道名字的话。
您可以使用这样的选择
SELECT * FROM INFORMATION_SCHEMA.TEMPORARY_TABLES WHERE TABLE_SCHEMA = "my_db"
显示在此会话 ID 中创建的所有临时表。不显示其他会话。
在 innodb 中你可以使用 e
SHOW TABLES FROM INFORMATION_SCHEMA LIKE 'INNODB_TEMP%';
https://dev.mysql.com/doc/refman/5.7/en/innodb-information-schema-temp-table-info.html