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?


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.


+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'

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.