¿Cómo sé si una tabla mysql está usando myISAM o InnoDB Engine?

85

En MySQL, no hay forma de especificar un motor de almacenamiento para una determinada base de datos, solo para tablas individuales. Sin embargo, puede especificar un motor de almacenamiento que se utilizará durante una sesión con:

SET storage_engine=InnoDB;

Por lo tanto, no tiene que especificarlo para cada tabla.

¿Cómo confirmo, si de hecho todas las tablas están usando InnoDB?

kamal
fuente

Respuestas:

134

Si usa SHOW CREATE TABLE, debe analizar el motor fuera de la consulta.

Seleccionar de la base de datos INFORMATION_SCHEMA es una mala práctica, ya que los desarrolladores se reservan el derecho de cambiar su esquema en cualquier momento (aunque es poco probable).

La consulta correcta para usar es MOSTRAR ESTADO DE LA TABLA : puede obtener información sobre todas las tablas en una base de datos:

SHOW TABLE STATUS FROM `database`;

O para una mesa específica:

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

Una de las columnas que obtendrá es Motor.

TehShrike
fuente
+1, excepto que siempre tiene permiso para ver el esquema de información de los objetos para los que tiene permiso.
Konerak
@Konerak Ah, es cierto, corregiré la respuesta. Aparte, he visto algunos errores en los que la selección de information_schema no funcionaba en los casos en que las personas tenían los permisos correctos.
TehShrike
15
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'
El Scrum Meister
fuente
La única advertencia es que los datos en INFORMATION_SCHEMA se almacenan en caché, por lo que es mejor usar FLUSH TABLES antes de la declaración que proporcionó
OMG Ponies
Me ayuda a contar el no de tablas InnoDB en DB.
30 de
3

show create table <table> debería hacer el truco.

Matt Caldwell
fuente