Obtenga nombres de tablas usando la instrucción SELECT en MySQL
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? */
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
Intentar:
select * from information_schema.tables
Ver: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
Si tenemos varias bases de datos y necesitamos seleccionar todas las tablas para una base de datos en particular, podemos usar TABLE_SCHEMA
para definir el nombre de la base de datos como:
select table_name from information_schema.tables where TABLE_SCHEMA='dbname';
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);
}
?>