Como posso verificar o tipo de mecanismo MySQL para uma tabela específica?

391

Meu banco de dados MySQL contém várias tabelas usando diferentes mecanismos de armazenamento (especificamente myisam e innodb). Como posso descobrir quais tabelas estão usando qual mecanismo?

a si mesmo
fonte

Respostas:

507

SHOW TABLE STATUS WHERE Name = 'xxx'

Isso fornecerá a você (entre outras coisas) uma Enginecoluna, que é o que você deseja.

Greg
fonte
4
Se minha tabela estiver danificada, ela simplesmente mostra Engine = NULL e possui um "Comentário" para que eu conserte a tabela. No entanto, antes de saber como consertar a mesa, acho que preciso conhecer o mecanismo (não cheguei tão longe para ser honesto.) Portanto, o comentário do @ Jocker abaixo foi muito mais útil para mim.
harperville
@ Greg, devemos usar essa ou a solução de Jocker?
Pacerier 24/02
@ Pacerier - Ambos funcionam bem. A diferença é que esta solução fornece as informações para uma tabela, enquanto a solução do Jocker mostra o tipo de mecanismo para todas as tabelas em um banco de dados (além de ser um pouco mais legível).
kramer65
@ Greg, Btw, por que as informações do motor não aparecem quando o fazemos show full columns from t1?
Pacerier 13/11/19
236

Para mostrar uma lista de todas as tabelas em um banco de dados e seus mecanismos, use esta consulta SQL:

SELECT TABLE_NAME,
       ENGINE
FROM   information_schema.TABLES
WHERE  TABLE_SCHEMA = 'dbname';

Substitua dbnamepelo nome do seu banco de dados.

Jocker
fonte
3
Isso é ótimo, porque filtra tudo, exceto o nome da tabela e o mecanismo.
Tom
11
Para obter o mecanismo da tabela específica, você pode usar: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond
11
Isso me dá um conjunto vazio no MySQL 5.6.37.
precisa saber é
11
Esta é uma resposta melhor porque é SQL verdadeiro, para que eu possa fazer coisas como COUNT(*)e GROUP BY.
Brandon
47
SHOW CREATE TABLE <tablename>;

Menos analisável, mas mais legível que SHOW TABLE STATUS.

Javier
fonte
41

ou apenas

show table status;

apenas isso listará todas as tabelas no seu banco de dados.

MArk Guadalupe
fonte
2
@NikolaiSamteladze, você tem tabelas no banco de dados selecionado?
Pacerier
15

Um pouco da resposta de Jocker (eu postaria como um comentário, mas ainda não tenho karma suficiente):

SELECT TABLE_NAME, ENGINE
  FROM information_schema.TABLES
 WHERE TABLE_SCHEMA = 'database' AND ENGINE IS NOT NULL;

Isso exclui as visualizações MySQL da lista, que não possuem um mecanismo.

Evan Donovan
fonte
9
SHOW CREATE TABLE <tablename>\G

irá formatá-lo muito melhor em comparação com a saída de

SHOW CREATE TABLE <tablename>;

O \Gtruque também é útil para lembrar para muitas outras consultas / comandos.

Nicholas
fonte
11
\ G corte é apenas sob mysql cli
gaRex
7
mysqlshow -i <database_name>

mostrará as informações para todas as tabelas de um banco de dados específico.

mysqlshow -i <database_name> <table_name> 

fará isso apenas para uma tabela específica.

Magia
fonte
11
Isso não responde à pergunta porque exibe os mecanismos para todas as tabelas. O iniciador da pergunta estava buscando informações sobre uma tabela específica.
Tass
4

mostre o status da tabela do database_name;

Ele listará todas as tabelas do banco de dados mencionado.
Saída de exemplo

saída de amostra do mysql db

mostre o status da tabela em que name = your_desired_table_name;

Ele mostrará o mecanismo de armazenamento usado pela tabela mencionada.

zahid
fonte
3

Se você estiver usando o MySQL Workbench, clique com o botão direito do mouse na tabela e selecione 'alterar tabela'.

Nessa janela, você pode ver o seu mecanismo de tabela e também alterá-lo.

T30
fonte
2

Outra maneira, talvez a mais curta para obter o status de um único ou conjunto de tabelas correspondente:

SHOW TABLE STATUS LIKE 'table';

Você pode usar os operadores LIKE, por exemplo:

SHOW TABLE STATUS LIKE 'field_data_%';
David Thomas
fonte
2

Se você é um usuário Linux:

Para mostrar os motores para todas as tabelas para todos os bancos de dados em um servidor MySQL, sem tabelas information_schema, mysql, performance_schema:

less < <({ for i in $(mysql -e "show databases;" | cat | grep -v -e Database-e information_schema -e mysql -e performance_schema); do echo "--------------------$i--------------------";  mysql -e "use $i; show table status;"; done } | column -t)

Você pode amar isso, se você estiver no Linux, pelo menos.

Irá abrir todas as informações para todas as tabelas less, pressione -Spara cortar linhas excessivamente longas.

Exemplo de saída:

--------------------information_schema--------------------
Name                                                        Engine              Version  Row_format  Rows   Avg_row_length  Data_length  Max_data_length     Index_length  Data_free  Auto_increment  Create_time  Update_time  Check_time  C
CHARACTER_SETS                                              MEMORY              10       Fixed       NULL   384             0            16434816            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLLATIONS                                                  MEMORY              10       Fixed       NULL   231             0            16704765            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLLATION_CHARACTER_SET_APPLICABILITY                       MEMORY              10       Fixed       NULL   195             0            16357770            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLUMNS                                                     MyISAM              10       Dynamic     NULL   0               0            281474976710655     1024          0          NULL            2015-07-13   15:48:45     2015-07-13  1
COLUMN_PRIVILEGES                                           MEMORY              10       Fixed       NULL   2565            0            16757145            0             0          NULL            2015-07-13   15:48:45     NULL        N
ENGINES                                                     MEMORY              10       Fixed       NULL   490             0            16574250            0             0          NULL            2015-07-13   15:48:45     NULL        N
EVENTS                                                      MyISAM              10       Dynamic     NULL   0               0            281474976710655     1024          0          NULL            2015-07-13   15:48:45     2015-07-13  1
FILES                                                       MEMORY              10       Fixed       NULL   2677            0            16758020            0             0          NULL            2015-07-13   15:48:45     NULL        N
GLOBAL_STATUS                                               MEMORY              10       Fixed       NULL   3268            0            16755036            0             0          NULL            2015-07-13   15:48:45     NULL        N
GLOBAL_VARIABLES                                            MEMORY              10       Fixed       NULL   3268            0            16755036            0             0          NULL            2015-07-13   15:48:45     NULL        N
KEY_COLUMN_USAGE                                            MEMORY              10       Fixed       NULL   4637            0            16762755            0 

.
.
.
sjas
fonte
0

vá para o banco de dados information_schema, você encontrará a tabela 'tables' e a seleciona;

Mysql> use information_schema; Mysql> selecione nome_da_tabela, mecanismo das tabelas;

harsha vardhan
fonte
0

Se você é um usuário de GUI e deseja apenas encontrá-lo no PhpMyAdmin , escolha a tabela de sua preferência e vá para a Operationsguia >> Table options>> Storage Engine. Você pode até mudar a partir daí usando a lista de opções suspensa.

PS: Este guia é baseado na versão 4.8 do PhpMyAdmin. Não é possível garantir o mesmo caminho para versões muito mais antigas.

mytuny
fonte