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.