在MySQL中,我知道我可以在数据库中列出表:

SHOW TABLES

但是,我想将这些表名插入到另一个表中,例如:

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

是否有一种方法可以使用标准的SELECT语句来获取表名,比如:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */

当前回答

还有一种更简单的方法来获取表名

SHOW TABLES FROM <database_name>

其他回答

Try:

select * from information_schema.tables

参见:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

如果我们有多个数据库,并且我们需要为一个特定的数据库选择所有的表,我们可以使用TABLE_SCHEMA定义数据库名称为:

从information_schema中选择table_name。where TABLE_SCHEMA='dbname';

是的,使用information_schema.TABLES。 这甚至适用于如下所示的Skyvia这样的云解决方案:

有了它,您可以简单地使用像上面这样的SELECT语句将其添加到INSERT语句中。但是更改table_schema值以匹配实际设置的数据库名称。

MySQL INFORMATION_SCHEMA。TABLES表包含关于两个表(不是临时表,而是永久表)和视图的数据。TABLE_TYPE列定义了这是表记录还是视图记录(对于表TABLE_TYPE='BASE table ',对于视图TABLE_TYPE=' view ')。所以如果你只想从你的schema(数据库)表中看到下面的查询:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'

我认为有必要指出,如果您想选择包含特定单词的表,可以使用select(而不是SHOW)轻松做到这一点。下面的查询可以轻松地将搜索范围缩小到包含“关键字”的表

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"