Comment puis-je vérifier le type de moteur MySQL pour une table spécifique?


391

Ma base de données MySQL contient plusieurs tables utilisant différents moteurs de stockage (spécifiquement myisam et innodb). Comment savoir quelles tables utilisent quel moteur?

Réponses:


507

SHOW TABLE STATUS WHERE Name = 'xxx'

Cela vous donnera (entre autres) une Enginecolonne, ce que vous voulez.


4
Si ma table est endommagée, elle affiche simplement Engine = NULL et comporte un "Commentaire" me demandant de réparer la table. Cependant, avant de savoir comment réparer la table, je suppose que je dois connaître le moteur (je ne suis pas allé si loin pour être honnête.) Par conséquent, le commentaire de @ Jocker ci-dessous m'a été beaucoup plus utile.
harperville

@Greg, Devrions-nous utiliser ceci ou la solution de Jocker?
Pacerier

@Pacerier - Les deux fonctionnent bien. La différence est que cette solution donne les informations pour une table, tandis que la solution de Jocker affiche le type de moteur pour toutes les tables d'une base de données (tout en étant un peu plus lisible également).
kramer65

@Greg, Btw pourquoi les informations sur le moteur n'apparaissent-elles pas lorsque nous le faisons show full columns from t1?
Pacerier

236

Pour afficher une liste de toutes les tables d'une base de données et de leurs moteurs, utilisez cette requête SQL:

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

Remplacez dbnamepar le nom de votre base de données.


3
C'est génial car il filtre tout sauf le nom de la table et le moteur.
Ton

1
Pour obtenir le moteur d'une table spécifique, vous pouvez utiliser: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond

1
Cela me donne un ensemble vide sur MySQL 5.6.37.
nnyby

1
C'est une meilleure réponse car c'est du vrai SQL, donc je peux faire des choses comme COUNT(*)et GROUP BY.
Brandon

47
SHOW CREATE TABLE <tablename>;

Moins analysable mais plus lisible que SHOW TABLE STATUS.


41

ou juste

show table status;

juste que cela listera toutes les tables de votre base de données.


2
@NikolaiSamteladze, Avez-vous des tables dans la base de données sélectionnée?
Pacerier

15

Un petit peu à la réponse de Jocker (je posterais comme commentaire, mais je n'ai pas encore assez de karma):

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

Cela exclut les vues MySQL de la liste, qui n'ont pas de moteur.


9
SHOW CREATE TABLE <tablename>\G

formatera beaucoup mieux que la sortie de

SHOW CREATE TABLE <tablename>;

L' \Gastuce est également utile à retenir pour de nombreuses autres requêtes / commandes.


1
\ G hack est seulement sous cli mysql
gaRex

7
mysqlshow -i <database_name>

affichera les informations pour toutes les tables d'une base de données spécifique.

mysqlshow -i <database_name> <table_name> 

le fera juste pour une table spécifique.


1
Cela ne répond pas à la question car il affiche les moteurs de toutes les tables. L'initiateur de la question recherchait des informations sur un tableau spécifique.
Tass

4

affichez le statut de la table à partir de database_name;

Il répertorie toutes les tables de la base de données mentionnée.
Exemple de sortie

exemple de sortie de mysql db

affichez l'état de la table où nom = votre_nom_table_desiré;

Il montrera le moteur de stockage utilisé par le tableau mentionné.


3

Si vous utilisez MySQL Workbench, vous pouvez cliquer avec le bouton droit sur la table et sélectionner «modifier la table».

Dans cette fenêtre, vous pouvez voir votre moteur de table et également le modifier.


2

Encore une autre façon, peut-être la plus courte pour obtenir le statut d'un ensemble de tables unique ou correspondant:

SHOW TABLE STATUS LIKE 'table';

Vous pouvez ensuite utiliser des opérateurs LIKE par exemple:

SHOW TABLE STATUS LIKE 'field_data_%';

2

Si vous êtes un utilisateur Linux:

Pour afficher les moteurs pour toutes les tables de toutes les bases de données sur un serveur MySQL, sans tables 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)

Vous pourriez aimer cela, si vous êtes sous Linux, au moins.

Ouvre toutes les informations de toutes les tables less, appuyez sur -Spour couper des lignes trop longues.

Exemple de sortie:

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

.
.
.

0

allez dans la base de données information_schema où vous trouverez la table 'tables' puis sélectionnez-la;

Mysql> use information_schema; Mysql> sélectionnez nom_table, moteur à partir des tables;


0

Si vous êtes un GUI et que vous souhaitez simplement le trouver dans PhpMyAdmin , choisissez la table de votre choix et rendez-vous sur l' Operationsonglet >> Table options>> Storage Engine. Vous pouvez même le modifier à partir de là en utilisant la liste d'options déroulante.

PS: ce guide est basé sur la version 4.8 de PhpMyAdmin. Je ne peux pas garantir le même chemin pour les versions très anciennes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.