使用MySQL中的SELECT语句获取表名

Mik*_*ain 237 mysql

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

SHOW TABLES
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */
Run Code Online (Sandbox Code Playgroud)

有没有办法使用标准的SELECT语句获取表名,如:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Run Code Online (Sandbox Code Playgroud)

Mur*_*cia 330

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

SELECT table_name FROM information_schema.tables;
Run Code Online (Sandbox Code Playgroud)

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

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';
Run Code Online (Sandbox Code Playgroud)

现在,要回答原始问题,请使用此查询:

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅:http://dev.mysql.com/doc/refman/5.0/en/information-schema.html


Nth*_*alk 143

尝试:

select * from information_schema.tables
Run Code Online (Sandbox Code Playgroud)

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

  • 这指向了正确的方向,但并没有真正回答这个问题.可以详细说明. (4认同)

Abs*_*Abs 19

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

select table_name from information_schema.tables where TABLE_SCHEMA='dbname';


Jam*_*ams 12

除了使用INFORMATION_SCHEMA表之外,要使用SHOW TABLES插入表中,您将使用以下内容

<?php
 $sql = "SHOW TABLES FROM $dbname";
 $result = mysql_query($sql);
 $arrayCount = 0
 while ($row = mysql_fetch_row($result)) {
  $tableNames[$arrayCount] = $row[0];
  $arrayCount++; //only do this to make sure it starts at index 0
 }
 foreach ($tableNames as &$name {
  $query = "INSERT INTO metadata (table_name) VALUES ('".$name."')";
  mysql_query($query);
 }
?>
Run Code Online (Sandbox Code Playgroud)


Ank*_*dal 11

要获取所有表的名称:

SELECT table_name 
FROM information_schema.tables;
Run Code Online (Sandbox Code Playgroud)

如果您需要为特定数据库获取它:

SELECT table_name 
FROM information_schema.tables
WHERE table_schema = 'your_db_name';
Run Code Online (Sandbox Code Playgroud)

输出:

+--------------------+
| table_name         |
+--------------------+
| myapp              |
| demodb             |
| cliquein           |
+--------------------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)


Gol*_*rol 8

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


And*_*rey 6

我想你可以从INFORMATION_SCHEMA TABLES获得你想要的数据.

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


Ste*_*oka 5

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Run Code Online (Sandbox Code Playgroud)

  • 请允许我在您的答案周围添加更多背景信息。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,它将对提问者和将来的读者都有帮助。 (3认同)

sbr*_*bot 5

MySQLINFORMATION_SCHEMA.TABLES表包含有关两个表(不是临时的而是永久的)和视图的数据。该列TABLE_TYPE定义这是表记录还是视图记录(对于表TABLE_TYPE='BASE TABLE'和视图TABLE_TYPE='VIEW')。因此,如果您只想从架构(数据库)表中查看以下查询:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'
Run Code Online (Sandbox Code Playgroud)


Smi*_*ith 5

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

SHOW TABLES FROM <database_name>
Run Code Online (Sandbox Code Playgroud)

  • 这根本没有回答问题。 (2认同)

Rob*_*air 5

我认为指出如果您想选择包含特定单词的表格可能会有所帮助,您可以使用SELECT(而不是SHOW)轻松完成。下面的查询可以轻松地将搜索范围缩小到包含“关键字”的表

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
Run Code Online (Sandbox Code Playgroud)