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


260

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

Answers:


381

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

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


144

尝试:

select * from information_schema.tables

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


4
这指出了正确的方向,但并不能真正回答问题。可以详细说明。
穆里洛·加西亚

@MuriloGarcia information_schema是SQL标准的一部分。Postgres也有。对于SQLite,您可以查看sqlite_master
peterchaula

使用名称按名称来获取表:从information_schema.tables中选择TABLE_NAME,其中TABLE_NAME类似于'%keyword%';
加勒特·巴内特

19

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

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


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);
 }
?>

8

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



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

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

4

MySQL INFORMATION_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'

2

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

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

0

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

SHOW TABLES FROM <database_name>

2
这根本无法回答问题。
Mike Chamberlain

当我搜索符合标题的内容时对我有帮助。
张世和

不。这不是很好,因为它仅显示mysql工具中的表。
TS

0

下面的查询对我有用。这可以显示数据库,表,列名,数据类型和列数。

**select table_schema Schema_Name ,table_name TableName,column_name ColumnName,ordinal_position "Position",column_type DataType,COUNT(1) ColumnCount
FROM information_schema.columns
GROUP by table_schema,table_name,column_name,ordinal_position, column_type;**

-3

要插入,更新和删除,请执行以下操作:

$teste = array('LOW_PRIORITY', 'DELAYED', 'HIGH_PRIORITY', 'IGNORE', 'INTO', 'INSERT', 'UPDATE', 'DELETE', 'QUICK', 'FROM');
$teste1 = array("\t", "\n", "\r", "\0", "\x0B");
$strsql = trim(str_ireplace($teste1, ' ', str_ireplace($teste, '', $strsql)));
$nomeTabela = substr($strsql, 0, strpos($strsql, ' '));

print($nomeTabela);
exit;

我们在这里期待英语。但是,我们确实有一个葡萄牙语网站:pt.stackoverflow.com
Laurel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.