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? */
Mike Chamberlain
fuente
posible duplicado de stackoverflow.com/questions/64894/…
hafichuk

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

Murilo Garcia
fuente
144

Tratar:

select * from information_schema.tables

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

Nthalk
fuente
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';

Abdominales
fuente
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);
 }
?>
James Williams
fuente
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.

GolezTrol
fuente
5
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Steven Soroka
fuente
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'
sbrbot
fuente
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%"
Robert Sinclair
fuente
0

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

SHOW TABLES FROM <database_name>
Herrero
fuente
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;**
Sidhajyoti
fuente
-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;
Eduardo Krp
fuente
Esperamos inglés aquí. Sin embargo, tenemos un sitio en portugués en: pt.stackoverflow.com
Laurel