Woher weiß ich, ob eine MySQL-Tabelle myISAM oder InnoDB Engine verwendet?

84

In MySQL gibt es keine Möglichkeit, eine Speicher-Engine für eine bestimmte Datenbank anzugeben, nur für einzelne Tabellen. Sie können jedoch eine Speicher-Engine angeben, die während einer Sitzung verwendet werden soll, mit:

SET storage_engine=InnoDB;

Sie müssen es also nicht für jede Tabelle angeben.

Wie bestätige ich, ob tatsächlich alle Tabellen InnoDB verwenden?

Kamal
quelle

Antworten:

131

Wenn Sie SHOW CREATE TABLE verwenden, müssen Sie die Engine aus der Abfrage heraus analysieren.

Die Auswahl aus der INFORMATION_SCHEMA-Datenbank ist eine schlechte Praxis, da sich die Entwickler das Recht vorbehalten, das Schema jederzeit zu ändern (obwohl dies unwahrscheinlich ist).

Die richtige Abfrage lautet SHOW TABLE STATUS - Sie können Informationen zu allen Tabellen in einer Datenbank abrufen:

SHOW TABLE STATUS FROM `database`;

Oder für eine bestimmte Tabelle:

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

Eine der Spalten, die Sie zurückerhalten, ist Engine.

Der Schrei
quelle
+1, außer Sie haben immer die Berechtigung, das Informationsschema für die Objekte anzuzeigen, für die Sie die Berechtigung haben.
Konerak
@Konerak Ah, wahr genug - ich werde die Antwort korrigieren. Abgesehen davon habe ich einige Fehler gesehen, bei denen die Auswahl aus information_schema in Fällen, in denen Personen die richtigen Berechtigungen hatten, nicht funktioniert hat.
TheShrike
15
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'
Der Scrum Meister
quelle
Die einzige Einschränkung ist, dass Daten in INFORMATION_SCHEMA zwischengespeichert sind. Verwenden Sie daher am besten FLUSH TABLES vor der von Ihnen angegebenen Anweisung
OMG Ponies
Es hilft mir, die Anzahl der InnoDB-Tabellen in der DB zu zählen.
Anon30
3

show create table <table> sollte den Trick machen.

Matt Caldwell
quelle