Come faccio a sapere se una tabella mysql sta usando myISAM o InnoDB Engine?


86

In MySQL, non è possibile specificare un motore di archiviazione per un determinato database, solo per singole tabelle. Tuttavia, è possibile specificare un motore di archiviazione da utilizzare durante una sessione con:

SET storage_engine=InnoDB;

Quindi non è necessario specificarlo per ogni tabella.

Come confermo, se effettivamente tutte le tabelle stanno usando InnoDB?


Risposte:


138

Se utilizzi SHOW CREATE TABLE, devi analizzare il motore dalla query.

Selezionare dal database INFORMATION_SCHEMA è una cattiva pratica, poiché gli sviluppatori si riservano il diritto di modificare il suo schema in qualsiasi momento (anche se è improbabile).

La query corretta da utilizzare è SHOW TABLE STATUS - puoi ottenere informazioni su tutte le tabelle in un database:

SHOW TABLE STATUS FROM `database`;

O per una tabella specifica:

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

Una delle colonne che riceverai è Engine.


+1, tranne per il fatto che hai sempre l'autorizzazione per visualizzare lo schema delle informazioni per gli oggetti per cui disponi dell'autorizzazione.
Konerak

@Konerak Ah, abbastanza vero - correggerò la risposta. Per inciso, ho visto alcuni bug in cui la selezione da information_schema non funzionava nei casi in cui le persone avevano le autorizzazioni corrette.
TehShrike

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

L'unico avvertimento è che i dati in INFORMATION_SCHEMA sono memorizzati nella cache, quindi è meglio usare FLUSH TABLES prima dell'istruzione che hai fornito
OMG Ponies

Mi aiuta a contare il numero di tabelle InnoDB nel DB.
Anon30

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.