Obtenga nombres de tablas usando la instrucción SELECT en MySQL

Resuelto Mike Chamberlain asked hace 12 años • 14 respuestas

En MySQL, sé que puedo listar las tablas en una base de datos con:

SHOW TABLES

Sin embargo, quiero insertar estos nombres de tablas en otra tabla, por ejemplo:

INSERT INTO metadata(table_name) SHOW TABLES /* does not work */

¿Hay alguna manera de obtener los nombres de las tablas usando una declaración SELECT estándar, algo como:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Mike Chamberlain avatar Dec 01 '11 06:12 Mike Chamberlain
Aceptado

Para obtener el nombre de todas las tablas utilice:

SELECT table_name FROM information_schema.tables;

Para obtener el nombre de las tablas de una base de datos específica, utilice:

SELECT table_name FROM information_schema.tables
WHERE table_schema = 'your_database_name';

Ahora, para responder la pregunta original, utilice esta consulta:

INSERT INTO table_name
    SELECT table_name FROM information_schema.tables
        WHERE table_schema = 'your_database_name';

Para obtener más detalles, consulte: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Murilo Garcia avatar Nov 18 '2014 18:11 Murilo Garcia

Intentar:

select * from information_schema.tables

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

Nthalk avatar Nov 30 '2011 23:11 Nthalk

Si tenemos varias bases de datos y necesitamos seleccionar todas las tablas para una base de datos en particular, podemos usar TABLE_SCHEMApara definir el nombre de la base de datos como:

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

ABC avatar May 02 '2015 16:05 ABC

Además de usar la tabla INFORMACIÓN_SCHEMA, para usar SHOW TABLES para insertar en una tabla, usaría lo siguiente

<?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);
 }
?>
James Williams avatar Nov 30 '2011 23:11 James Williams