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?


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.


+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'

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.