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

当前回答

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'

其他回答

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'

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

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

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

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

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

从information_schema中选择table_name。where TABLE_SCHEMA='dbname';