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

391

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

uno mismo
fuente

Respuestas:

507

SHOW TABLE STATUS WHERE Name = 'xxx'

Esto le dará (entre otras cosas) una Enginecolumna, que es lo que desea.

Greg
fuente
44
Si mi tabla está dañada, simplemente muestra Engine = NULL y tiene un "Comentario" que me dice que repare la tabla. Sin embargo, antes de saber cómo reparar la mesa, supongo que necesito conocer el motor (no he llegado tan lejos para ser honesto). Por lo tanto, el comentario de @ Jocker a continuación fue mucho más útil para mí.
Harperville
@ Greg, ¿deberíamos usar esta o la solución de Jocker?
Pacerier
@Pacerier: ambos funcionan bien. La diferencia es que esta solución proporciona la información para una tabla, mientras que la solución de Jocker muestra el tipo de motor para todas las tablas en una base de datos (aunque también es un poco más legible).
kramer65
@ Greg, por cierto, ¿por qué no aparece la información del motor cuando lo hacemos show full columns from t1?
Pacerier
236

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 dbnamecon el nombre de su base de datos.

Jocker
fuente
3
Esto es genial b / c, filtra todo menos el nombre de la tabla y el motor.
Tono
1
Para obtener el motor de una tabla específica, puede usar: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond el
1
Esto me da un conjunto vacío en MySQL 5.6.37.
nnyby
1
Esta es una mejor respuesta porque es SQL verdadero, así que puedo hacer cosas como COUNT(*)y GROUP BY.
Brandon
47
SHOW CREATE TABLE <tablename>;

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

Javier
fuente
41

o solo

show table status;

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

MArk Guadalupe
fuente
2
@NikolaiSamteladze, ¿Tienes tablas en la base de datos seleccionada?
Pacerier
15

Un pequeño ajuste a la respuesta de Jocker (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.

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

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

SHOW CREATE TABLE <tablename>;

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

Nicholas
fuente
1
\ G hack solo está bajo cli mysql
gaRex
7
mysqlshow -i <database_name>

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

mysqlshow -i <database_name> <table_name> 

lo hará solo para una tabla específica.

magia
fuente
1
Esto no responde a la pregunta porque muestra los motores de todas las tablas. El iniciador de la pregunta estaba buscando información sobre una tabla específica.
Tass
4

muestra el estado de la tabla de database_name;

Enumerará todas las tablas de la base de datos mencionada.
Salida de ejemplo

salida de muestra de mysql db

muestra el estado de la tabla donde name = your_desired_table_name;

Mostrará el motor de almacenamiento utilizado por la tabla mencionada.

zahid
fuente
3

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

En esa ventana puede ver su tabla Engine y también cambiarla.

T30
fuente
2

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

SHOW TABLE STATUS LIKE 'table';

Luego puede usar operadores LIKE, por ejemplo:

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

Si eres un usuario de Linux:

Para mostrar los motores para 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 encante esto, si estás en Linux, al menos.

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

Salida de ejemplo:

--------------------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
fuente
0

vaya a la base de datos de información_esquema allí encontrará la tabla 'tablas' y luego selecciónela;

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

harsha vardhan
fuente
0

Si eres un tipo de GUI y solo quieres encontrarlo en PhpMyAdmin , elige la tabla que elijas y ve a la Operationspestaña >> Table options>> Storage Engine. Incluso puede cambiarlo desde allí utilizando la lista de opciones desplegable.

PD: esta guía se basa en la versión 4.8 de PhpMyAdmin. No se puede garantizar la misma ruta para versiones muy antiguas.

mytuny
fuente