2010-12-23 14 views
66

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:¿Cómo puedo saber si una tabla mysql está utilizando myISAM o InnoDB Engine?

SET storage_engine=InnoDB; 

Por lo que no tiene que especificar para cada tabla.

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

+0

posible duplicado de [¿Cómo puedo verificar el tipo de motor MySQL para una tabla específica?] (Http://stackoverflow.com/questions/213543/how-can-i-check-mysql-engine-type-for-a -specific-table) –

Respuesta

107

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

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

La consulta correcta a utilizar es SHOW TABLE STATUS - se puede obtener información sobre todas las tablas de una base de datos:

SHOW TABLE STATUS FROM `database`; 

O para una tabla específica:

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

Una de las columnas recuperarás es el motor.

+0

+1, excepto que siempre tiene permiso para ver el esquema de información de los objetos para los que tiene permiso. – Konerak

+0

@Konerak Ah, es verdad, corregiré la respuesta. Como comentario adicional, he visto algunos _bugs_ donde la selección de information_schema no funcionó en los casos en que las personas tenían los permisos correctos. – TehShrike

11
SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB' 
+0

La única advertencia es que los datos en INFORMATION_SCHEMA están en la memoria caché, así que es mejor utilizar [FLUSH TABLES] (http://dev.mysql.com/doc/refman/5.0/en/flush.html) antes de la declaración proporcionó –

+0

@omg 'ALTER TABLE SET ENIGINE =' ¿no borrar/restablecer la caché? –

+0

No vale la pena correr el riesgo –

2

show create table <table> debe hacer el truco.

Cuestiones relacionadas