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

时间:2011-11-30 23:25:54

标签: mysql

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

12 个答案:

答案 0 :(得分:287)

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

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

答案 1 :(得分:141)

尝试:

select * from information_schema.tables

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

答案 2 :(得分: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);
 }
?>

答案 3 :(得分:8)

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

答案 4 :(得分:6)

我认为你可以从INFORMATION_SCHEMA TABLES获得你想要的数据。

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

答案 5 :(得分:3)

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

答案 6 :(得分:3)

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'

答案 7 :(得分:0)

There is yet another simpler way to get table names

SHOW TABLES FROM <database_name>

答案 8 :(得分:0)

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

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

答案 9 :(得分: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;**

答案 10 :(得分:0)

用于获取所有表的名称:

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)

答案 11 :(得分:-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;