2010-12-23 9 views
66

In MySQL gibt es keine Möglichkeit, eine Speicher-Engine für eine bestimmte Datenbank nur für einzelne Tabellen anzugeben. Sie können jedoch eine Speicher-Engine mit während einer Sitzung verwendet werden soll angeben:Woher weiß ich, ob eine mysql-Tabelle myISAM oder InnoDB Engine verwendet?

SET storage_engine=InnoDB; 

So Sie es nicht für jede Tabelle angeben.

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

+0

mögliche Duplikate von [Wie kann ich MySQL-Engine-Typ für eine bestimmte Tabelle überprüfen?] (Http://stackoverflow.com/questions/213543/how-can-i-check-mysql-engine-type-for-a- -spezifische Tabelle) –

Antwort

107

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

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

Die richtige Abfrage zu verwenden ist SHOW TABLE STATUS - Sie Informationen über alle Tabellen in einer Datenbank erhalten können:

SHOW TABLE STATUS FROM `database`; 

oder für eine bestimmte Tabelle:

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

Eine der Säulen Du wirst zurückkommen, ist Engine.

+0

+1, außer Sie haben immer die Berechtigung, das Informationsschema für die Objekte anzuzeigen, für die Sie eine Berechtigung besitzen. – Konerak

+0

@Konerak Ah, wahr genug - ich werde die Antwort korrigieren. Nebenbei habe ich einige _bugs_ gesehen, bei denen die Auswahl aus information_schema in Fällen, in denen die Leute die richtigen Berechtigungen hatten, nicht funktionierte. – TehShrike

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

Nur Vorbehalte sind Daten in INFORMATION_SCHEMA ist zwischengespeichert, so am besten zu verwenden [FLUSH TABLES] (http://dev.mysql.com/doc/refman/5.0/en/flush.html) vor der Aussage Sie haben –

+0

@omg 'ALTER TABLE SET ENIGINE =' gelöscht/zurückgesetzt den Cache? –

+0

Lohnt sich die Chance nicht –

2

show create table <table> sollte den Trick tun.

Verwandte Themen