Wie kann ich den MySQL-Engine-Typ für eine bestimmte Tabelle überprüfen?

391

Meine MySQL-Datenbank enthält mehrere Tabellen mit verschiedenen Speicher-Engines (insbesondere myisam und innodb). Wie kann ich herausfinden, welche Tabellen welche Engine verwenden?

man selbst
quelle

Antworten:

507

SHOW TABLE STATUS WHERE Name = 'xxx'

Dadurch erhalten Sie (unter anderem) eine EngineSpalte, die Sie möchten.

Greg
quelle
4
Wenn mein Tisch beschädigt ist, zeigt er einfach Engine = NULL an und hat einen "Kommentar", der mich auffordert, den Tisch zu reparieren. Bevor ich jedoch weiß, wie man den Tisch repariert, muss ich den Motor kennen (ich bin ehrlich gesagt noch nicht so weit gekommen). Daher war der Kommentar von @ Jocker unten für mich viel hilfreicher.
Harperville
@ Greg, sollten wir diese oder Jockers Lösung verwenden?
Pacerier
@ Pacerier - Beide funktionieren gut. Der Unterschied besteht darin, dass diese Lösung die Informationen für eine Tabelle liefert, während die Lösung von Jocker den Motortyp für alle Tabellen in einer Datenbank anzeigt (und gleichzeitig etwas lesbarer ist).
kramer65
@ Greg, übrigens, warum werden bei uns keine Motorinformationen angezeigt show full columns from t1?
Pacerier
236

Verwenden Sie diese SQL-Abfrage, um eine Liste aller Tabellen in einer Datenbank und ihrer Engines anzuzeigen:

SELECT TABLE_NAME,
       ENGINE
FROM   information_schema.TABLES
WHERE  TABLE_SCHEMA = 'dbname';

Ersetzen Sie dbnamedurch Ihren Datenbanknamen.

Jocker
quelle
3
Dies ist großartig, da es alles außer Tabellenname und Motor herausfiltert.
Ton
1
Um die Engine einer bestimmten Tabelle zu erhalten, können Sie SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
Folgendes
1
Dies gibt mir einen leeren Satz unter MySQL 5.6.37.
nnyby
1
Dies ist eine bessere Antwort, da es sich um echtes SQL handelt, sodass ich Dinge wie COUNT(*)und tun kann GROUP BY.
Brandon
47
SHOW CREATE TABLE <tablename>;

Weniger analysierbar, aber besser lesbar als SHOW TABLE STATUS.

Javier
quelle
41

oder nur

show table status;

Nur dass dadurch alle Tabellen in Ihrer Datenbank aufgelistet werden.

Herr Guadalupe
quelle
2
@NikolaiSamteladze, Haben Sie Tabellen in der ausgewählten Datenbank?
Pacerier
15

Eine kleine Änderung an Jockers Antwort (ich würde als Kommentar posten, aber ich habe noch nicht genug Karma):

SELECT TABLE_NAME, ENGINE
  FROM information_schema.TABLES
 WHERE TABLE_SCHEMA = 'database' AND ENGINE IS NOT NULL;

Dies schließt MySQL-Ansichten aus der Liste aus, die keine Engine haben.

Evan Donovan
quelle
9
SHOW CREATE TABLE <tablename>\G

wird es viel schöner formatieren als die Ausgabe von

SHOW CREATE TABLE <tablename>;

Der \GTrick ist auch nützlich, um sich an viele andere Abfragen / Befehle zu erinnern.

Nikolaus
quelle
1
\ G Hack ist nur unter cli mysql
gaRex
7
mysqlshow -i <database_name>

zeigt die Informationen für alle Tabellen einer bestimmten Datenbank an.

mysqlshow -i <database_name> <table_name> 

wird dies nur für eine bestimmte Tabelle tun.

Magie
quelle
1
Dies beantwortet die Frage nicht, da die Engines für alle Tabellen angezeigt werden. Der Initiator der Frage suchte nach Informationen zu einer bestimmten Tabelle.
Tass
4

Tabellenstatus aus Datenbankname anzeigen;

Es werden alle Tabellen aus der genannten Datenbank aufgelistet.
Beispielausgabe

Beispielausgabe von MySQL DB

Tabellenstatus anzeigen, wobei name = your_desired_table_name;

Es wird die von der genannten Tabelle verwendete Speicher-Engine angezeigt.

zahid
quelle
3

Wenn Sie die MySQL Workbench verwenden, können Sie mit der rechten Maustaste auf die Tabelle klicken und "Tabelle ändern" auswählen.

In diesem Fenster können Sie Ihre Tabelle Engine sehen und auch ändern.

T30
quelle
2

Noch ein anderer Weg, vielleicht der kürzeste, um den Status eines einzelnen oder übereinstimmenden Satzes von Tabellen zu erhalten:

SHOW TABLE STATUS LIKE 'table';

Sie können dann beispielsweise LIKE-Operatoren verwenden:

SHOW TABLE STATUS LIKE 'field_data_%';
David Thomas
quelle
2

Wenn Sie ein Linux-Benutzer sind:

Um die Motoren zu zeigen für alle Tabellen für alle Datenbanken auf einem MySQL - Server, ohne Tabellen information_schema, mysql, performance_schema:

less < <({ for i in $(mysql -e "show databases;" | cat | grep -v -e Database-e information_schema -e mysql -e performance_schema); do echo "--------------------$i--------------------";  mysql -e "use $i; show table status;"; done } | column -t)

Sie könnten dies lieben, wenn Sie zumindest unter Linux sind.

Öffnet alle Informationen für alle Tabellen in less, drücken Sie -S, um zu lange Zeilen zu hacken.

Beispielausgabe:

--------------------information_schema--------------------
Name                                                        Engine              Version  Row_format  Rows   Avg_row_length  Data_length  Max_data_length     Index_length  Data_free  Auto_increment  Create_time  Update_time  Check_time  C
CHARACTER_SETS                                              MEMORY              10       Fixed       NULL   384             0            16434816            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLLATIONS                                                  MEMORY              10       Fixed       NULL   231             0            16704765            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLLATION_CHARACTER_SET_APPLICABILITY                       MEMORY              10       Fixed       NULL   195             0            16357770            0             0          NULL            2015-07-13   15:48:45     NULL        N
COLUMNS                                                     MyISAM              10       Dynamic     NULL   0               0            281474976710655     1024          0          NULL            2015-07-13   15:48:45     2015-07-13  1
COLUMN_PRIVILEGES                                           MEMORY              10       Fixed       NULL   2565            0            16757145            0             0          NULL            2015-07-13   15:48:45     NULL        N
ENGINES                                                     MEMORY              10       Fixed       NULL   490             0            16574250            0             0          NULL            2015-07-13   15:48:45     NULL        N
EVENTS                                                      MyISAM              10       Dynamic     NULL   0               0            281474976710655     1024          0          NULL            2015-07-13   15:48:45     2015-07-13  1
FILES                                                       MEMORY              10       Fixed       NULL   2677            0            16758020            0             0          NULL            2015-07-13   15:48:45     NULL        N
GLOBAL_STATUS                                               MEMORY              10       Fixed       NULL   3268            0            16755036            0             0          NULL            2015-07-13   15:48:45     NULL        N
GLOBAL_VARIABLES                                            MEMORY              10       Fixed       NULL   3268            0            16755036            0             0          NULL            2015-07-13   15:48:45     NULL        N
KEY_COLUMN_USAGE                                            MEMORY              10       Fixed       NULL   4637            0            16762755            0 

.
.
.
sjas
quelle
0

Gehen Sie zur Datenbank information_schema, dort finden Sie die Tabelle 'tables' und wählen Sie sie aus.

MySQL> benutze information_schema; MySQL> Wählen Sie Tabellenname, Engine aus Tabellen;

Harsha Vardhan
quelle
0

Wenn Sie ein GUI- Typ sind und es nur in PhpMyAdmin finden möchten , wählen Sie die Tabelle Ihrer Wahl aus und gehen Sie über die OperationsRegisterkarte >> Table options>> Storage Engine. Sie können es sogar von dort aus mithilfe der Dropdown-Optionsliste ändern.

PS: Dieses Handbuch basiert auf Version 4.8 von PhpMyAdmin. Kann nicht den gleichen Pfad für sehr ältere Versionen garantieren.

mytuny
quelle