Obter nomes de tabelas usando a instrução SELECT no MySQL

260

No MySQL, eu sei que posso listar as tabelas em um banco de dados com:

SHOW TABLES

No entanto, quero inserir esses nomes de tabelas em outra tabela, por exemplo:

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

Existe uma maneira de obter os nomes das tabelas usando uma instrução SELECT padrão, algo como:

INSERT INTO metadata(table_name) SELECT name FROM table_names /* what should table_names be? */
Mike Chamberlain
fonte
possível duplicação de stackoverflow.com/questions/64894/…
hafichuk

Respostas:

381

Para obter o nome de todas as tabelas, use:

SELECT table_name FROM information_schema.tables;

Para obter o nome das tabelas de um banco de dados específico, use:

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

Agora, para responder à pergunta original, use esta consulta:

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

Para mais detalhes, consulte: http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Murilo Garcia
fonte
144

Experimentar:

select * from information_schema.tables

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

Nthalk
fonte
4
Isso aponta na direção certa, mas realmente não responde à pergunta. Poderia elaborar mais.
Murilo Garcia
@MuriloGarcia information_schema faz parte do padrão SQL. O Postgres também tem. Para SQLite, você olha dentrosqlite_master
peterchaula
Buscando tabelas por nome usando LIKE: SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE '% keyword%';
Jarrett Barnett
19

se temos vários bancos de dados e precisamos selecionar todas as tabelas para um banco de dados específico, podemos usar TABLE_SCHEMApara definir o nome do banco de dados como:

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

Abdômen
fonte
12

Além de usar a tabela INFORMATION_SCHEMA, para usar SHOW TABLES para inserir em uma tabela, você usaria o seguinte

<?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
fonte
8

Dê uma olhada na tabela TABLESno banco de dados information_schema. Ele contém informações sobre as tabelas em seus outros bancos de dados. Mas se você estiver em hospedagem compartilhada, provavelmente não terá acesso a ela.

GolezTrol
fonte
5
SELECT table_name 
FROM information_schema.tables 
WHERE table_schema = 'DATABASE'
Steven Soroka
fonte
3
Posso solicitar que você adicione um pouco mais de contexto à sua resposta. As respostas somente de código são difíceis de entender. Isso ajudará os solicitantes e os futuros leitores, se você puder adicionar mais informações em sua postagem.
RBT
4

A INFORMATION_SCHEMA.TABLEStabela MySQL contém dados sobre ambas as tabelas (não temporárias, mas permanentes) e visualizações. A coluna TABLE_TYPEdefine se este é um registro para tabela ou exibição (para tabelas TABLE_TYPE='BASE TABLE'e visualizações TABLE_TYPE='VIEW'). Portanto, se você deseja ver apenas nas tabelas de esquema (banco de dados), há a seguinte consulta:

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

Eu acho que pode ser útil ressaltar que, se você quiser selecionar tabelas que contenham palavras específicas, poderá fazê-lo facilmente usando o SELECT(em vez de SHOW). A consulta abaixo restringe facilmente a pesquisa a tabelas que contêm "palavra-chave"

SELECT *
FROM information_schema.tables
WHERE table_name like "%keyword%"
Robert Sinclair
fonte
0

Existe ainda outra maneira mais simples de obter nomes de tabelas

SHOW TABLES FROM <database_name>
Smith
fonte
2
Isso não responde à pergunta.
Mike Chamberlain
Ajudou-me quando procuro por algo que atingiu o título da pergunta.
Shihe Zhang
Não. Isso não é bom, pois mostra apenas as tabelas nas ferramentas do mysql.
TS
0

Esta consulta abaixo funcionou para mim. Isso pode mostrar os bancos de dados, tabelas, nomes de colunas, tipos de dados e contagem de colunas.

**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
fonte
-3

Para inserir, atualizar e excluir, faça o seguinte:

$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
fonte
Esperamos inglês aqui. No entanto, temos um site em português em: pt.stackoverflow.com
Laurel