¿Cómo puedo verificar el tipo de motor MySQL para una tabla específica?

Mi base de datos MySQL contiene varias tablas que usan diferentes motores de almacenamiento (específicamente myisam e innodb). ¿Cómo puedo saber qué tablas están usando qué motor?

SHOW TABLE STATUS WHERE Name = 'xxx'

Esto le dará (entre otras cosas) una columna de Engine , que es lo que quiere.

Para mostrar una lista de todas las tablas en una base de datos y sus motores, use esta consulta SQL:

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

Reemplace dbname con su nombre de base de datos.

 SHOW CREATE TABLE ; 

Menos parseable pero más legible que SHOW TABLE STATUS .

o solo

show table status;

solo que esto listará todas las tablas en su base de datos.

Un pequeño retoque a la respuesta de Jocker (lo publicaría como un comentario, pero todavía no tengo suficiente karma):

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

Esto excluye las vistas de MySQL de la lista, que no tienen un motor.

 SHOW CREATE TABLE \G 

formateará mucho mejor en comparación con la salida de

 SHOW CREATE TABLE ; 

El truco \G también es útil para recordar para muchas otras consultas / comandos.

 mysqlshow -i  

mostrará la información de todas las tablas de una base de datos específica.

 mysqlshow -i   

lo hará solo para una tabla específica.

Si está utilizando MySQL Workbench, puede hacer clic con el botón derecho en la tabla y seleccionar ‘alterar tabla’.

En esa ventana puedes ver tu tabla Motor y también cambiarla.

Si eres un usuario de Linux:

Para mostrar los motores de todas las tablas para todas las bases de datos en un servidor mysql, sin tablas 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) 

Puede que te guste esto, si estás en Linux, al menos.

Se abrirá toda la información para todas las tablas en less , presione -S para cortar líneas excesivamente largas.

Ejemplo de salida:

 --------------------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 . . . 

ir a la base de datos de information_schema allí encontrará la tabla de ‘tablas’ y luego seleccionarla;

Mysql> use information_schema; Mysql> seleccione table_name, motor de tablas;

Otra forma, quizás la más corta para obtener el estado de un conjunto único o coincidente de tablas:

 SHOW TABLE STATUS LIKE 'table'; 

Puede usar operadores LIKE por ejemplo:

 SHOW TABLE STATUS LIKE 'field_data_%';