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


260

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

SHOW TABLES

Sin embargo, quiero insertar estos nombres de tabla 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 instrucción SELECT estándar, algo así como:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */

Respuestas:


381

Para obtener el nombre de todas las tablas use:

SELECT table_name FROM information_schema.tables;

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

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

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

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

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


144

Tratar:

select * from information_schema.tables

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


44
Esto apunta en la dirección correcta, pero en realidad no responde la pregunta. Podría elaborar más.
— Murilo Garcia

@MuriloGarcia information_schema es parte del estándar SQL. Postgres también lo tiene. Para SQLite, buscas ensqlite_master
— peterchaula

Obteniendo tablas por nombre usando LIKE: SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% keyword%';
— Jarrett Barnett el

19

si tenemos varias bases de datos y necesitamos seleccionar todas las tablas para una base de datos 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';


12

Además de usar la tabla INFORMATION_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);
 }
?>

8

Echa un vistazo a la tabla TABLESen la base de datos information_schema. Contiene información sobre las tablas en sus otras bases de datos. Pero si estás en un alojamiento compartido, probablemente no tengas acceso a él.



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

3
¿Puedo pedirle que agregue un poco más de contexto alrededor de su respuesta? Las respuestas de solo código son difíciles de entender. Ayudará tanto al autor de la pregunta como a los futuros lectores si puede agregar más información en su publicación.
— RBT

4

La INFORMATION_SCHEMA.TABLEStabla MySQL contiene datos sobre ambas tablas (no temporales sino permanentes) y vistas. La columna TABLE_TYPEdefine si se trata de un registro para tabla o vista (para tablas TABLE_TYPE='BASE TABLE'y vistas TABLE_TYPE='VIEW'). Entonces, si desea ver desde sus tablas de esquema (base de datos) solo existe la siguiente consulta:

SELECT *
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='myschema'

2

Creo que puede ser útil señalar que si desea seleccionar tablas que contengan palabras específicas, puede hacerlo fácilmente usando SELECT(en lugar de SHOW). La consulta a continuación reduce fácilmente la búsqueda a tablas que contienen "palabra clave"

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

0

Hay otra forma más simple de obtener nombres de tablas

SHOW TABLES FROM <database_name>

2
Esto no responde a la pregunta en absoluto.
— Mike Chamberlain

Me ayudó cuando busqué algo que golpeara el título de la pregunta.
— Shihe Zhang el

No. Esto no es bueno ya que solo muestra las tablas en las herramientas mysql.
— TS

0

Esta consulta a continuación funcionó para mí. Esto puede mostrar las bases de datos, tablas, nombres de columnas, tipos de datos y recuento de columnas.

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

-3

Para insertar, actualizar y eliminar, haga lo siguiente:

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

Esperamos inglés aquí. Sin embargo, tenemos un sitio en portugués en: pt.stackoverflow.com
— Laurel
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.