在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? */

当前回答

要获取所有表的名称,请使用:

SELECT table_name FROM information_schema.tables;

要从特定的数据库中获取表的名称,请使用:

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';

现在,回答最初的问题,使用这个查询:

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';

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

其他回答

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'

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 table_name 
FROM information_schema.tables;

如果你需要为一个特定的数据库获取它:

SELECT table_name 
FROM information_schema.tables
WHERE table_schema = 'your_db_name';

输出:

+--------------------+
| table_name         |
+--------------------+
| myapp              |
| demodb             |
| cliquein           |
+--------------------+
3 rows in set (0.00 sec)

查看数据库information_schema中的TABLES表。它包含关于其他数据库中的表的信息。但如果您使用的是共享主机,则可能无法访问它。

我认为您可以从INFORMATION_SCHEMA TABLES中获得所需的数据。

你可以在这里找到更多信息:http://dev.mysql.com/doc/refman/5.0/en/tables-table.html