it-swarm-pt.tech

Selecionar dados da consulta MySQL "show tables"

É possível selecionar entre show tables no MySQL?

SELECT * FROM (SHOW TABLES) AS `my_tables`

Algo nesse sentido, embora o acima não funcione (no 5.0.51a, pelo menos).

52
BioTronic

Eu acho que você quer SELECT * FROM INFORMATION_SCHEMA.TABLES

Consulte http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

42
Andrew

Não que eu saiba, a menos que você selecione INFORMATION_SCHEMA, como outros já mencionaram.

No entanto, o comando SHOW é bastante flexível, por exemplo:

SHOW tables like '%s%'
20
Lucas Oman

Contar:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;

Listar:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
11
Ivan Ferrer

Você pode estar mais perto do que pensa - o SHOW TABLES já se comporta muito como SELECT:

$pdo = new PDO("mysql:Host=$Host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}
4
Bob Stein

Você já consultou o arquivo INFORMATION_SCHEMA.Tables? Como em

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
4
BigJim

Você não pode colocar instruções SHOW dentro de uma subconsulta como no seu exemplo. A única instrução que pode entrar em uma subconsulta é SELECT.

Como outras respostas indicaram, você pode consultar o INFORMATION_SCHEMA diretamente com SELECT e obter muito mais flexibilidade dessa maneira.

As instruções SHOW do MySQL são internamente apenas consultas nas tabelas INFORMATION_SCHEMA.

O usuário @physicalattraction publicou este comentário na maioria das outras respostas:

Isso fornece (meta) informações sobre as tabelas, não o conteúdo da tabela, conforme o OP pretendido. - atração física

Pelo contrário, a pergunta do OP não diz que deseja selecionar os dados em todas as tabelas. Eles dizem que querem selecionar o resultado de SHOW TABLES, que é apenas uma lista de nomes de tabelas.

Se o OP deseja selecionar todos os dados de todas as tabelas, a resposta é não, você não pode fazê-lo com uma consulta. Cada consulta deve nomear suas tabelas explicitamente. Você não pode tornar o nome de uma tabela uma variável ou o resultado de outra parte da mesma consulta. Além disso, todas as linhas de um determinado resultado da consulta devem ter as mesmas colunas.

Portanto, a única maneira de selecionar todos os dados de todas as tabelas seria executar SHOW TABLES e, para cada tabela nomeada nesse resultado, execute outra consulta.

4
Bill Karwin

Você pode criar um procedimento armazenado e colocar os nomes das tabelas em um cursor, depois percorrer os nomes das tabelas para mostrar os dados.

Introdução ao procedimento armazenado: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

Criando um cursor: http://www.mysqltutorial.org/mysql-cursor/

Por exemplo,

CREATE PROCEDURE `ShowFromTables`()
BEGIN

DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";

DECLARE table_cursor CURSOR FOR 
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';

DECLARE CONTINUE HANDLER 
    FOR NOT FOUND SET v_finished = 1;

OPEN table_cursor;

get_data: LOOP

FETCH table_cursor INTO c_table;

IF v_finished = 1 THEN 
LEAVE get_data;
END IF;

SET @s=CONCAT("SELECT * FROM ",c_table,";");

PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END LOOP get_data;

CLOSE table_cursor;

END

Em seguida, chame o procedimento armazenado:

CALL ShowFromTables();
3
Bridget Arrington
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

Isso retornará o comentário em: myTable.myColumnName

3
Brian

Eu acho que o que você deseja é a view information_schema do MySQL: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3
Matt Rogish
SELECT * FROM INFORMATION_SCHEMA.TABLES

Isso deve ser um bom começo. Para mais informações, consulte Tabelas INFORMATION_SCHEMA .

3
Sören Kuklau

no MySql 5.1 você pode tentar

show tables like 'user%';

saída:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)
2
MT467

Sim, SELECT from table_schema pode ser muito útil para a administração do sistema. Se você tem muitos servidores, bancos de dados, tabelas ... às vezes você precisa DROP ou UPDATE de vários elementos. Por exemplo, para criar uma consulta para DROP todas as tabelas com o nome do prefixo "wp_old _...":

SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
2
Srdjan

Não entendo por que você deseja usar SELECT * FROM como parte da declaração.

12.5.5.30. MOSTRAR TABELAS Sintaxe

1
Derek B. Bell