Como posso saber se uma tabela mysql está usando myISAM ou InnoDB Engine?

85

No MySQL, não há como especificar um mecanismo de armazenamento para um determinado banco de dados, apenas para tabelas únicas. No entanto, você pode especificar um mecanismo de armazenamento a ser usado durante uma sessão com:

SET storage_engine=InnoDB;

Portanto, você não precisa especificá-lo para cada tabela.

Como posso confirmar, se de fato todas as tabelas estão usando InnoDB?

kamal
fonte

Respostas:

134

Se você usar SHOW CREATE TABLE, terá que analisar o mecanismo da consulta.

Selecionar no banco de dados INFORMATION_SCHEMA é uma prática ruim, pois os desenvolvedores se reservam o direito de alterar seu esquema a qualquer momento (embora seja improvável).

A consulta correta a ser usada é SHOW TABLE STATUS - você pode obter informações sobre todas as tabelas em um banco de dados:

SHOW TABLE STATUS FROM `database`;

Ou para uma mesa específica:

SHOW TABLE STATUS FROM `database` LIKE 'tablename';

Uma das colunas que você receberá de volta é Motor.

TehShrike
fonte
+1, exceto que você sempre tem permissão para ver o esquema de informações para os objetos para os quais você tem permissão.
Konerak
@Konerak Ah, é verdade - corrigirei a resposta. Como um aparte, eu vi alguns bugs em que a seleção de information_schema não funcionou nos casos em que as pessoas tinham as permissões corretas.
TehShrike
15
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'
O Scrum Meister
fonte
A única ressalva é que os dados em INFORMATION_SCHEMA são armazenados em cache, então é melhor usar FLUSH TABLES antes da declaração que você forneceu
OMG Ponies
Isso me ajuda a contar o número de tabelas InnoDB no DB.
Anon30
3

show create table <table> deve fazer o truque.

Matt Caldwell
fonte