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

在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? */
689131 次浏览

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

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

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

试一试:

select * from information_schema.tables

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

除了使用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);
}
?>

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

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

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

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

插入、更新和删除操作如下:

$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;
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'

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

SHOW TABLES FROM <database_name>

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

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

下面这个问题对我有用。这可以显示数据库,表,列名,数据类型和列数。

**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;**

用于获取所有表的名称:

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。 这甚至适用于如下所示的Skyvia这样的云解决方案

enter image description here

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