Come posso controllare il tipo di motore MySQL per una tabella specifica?


391

Il mio database MySQL contiene diverse tabelle che utilizzano diversi motori di archiviazione (in particolare myisam e innodb). Come posso sapere quali tabelle utilizzano quale motore?

Risposte:


507

SHOW TABLE STATUS WHERE Name = 'xxx'

Questo ti darà (tra le altre cose) una Enginecolonna, che è quello che vuoi.


4
Se la mia tabella è danneggiata, mostra semplicemente Engine = NULL e ha un "Commento" che mi dice di riparare la tabella. Tuttavia, prima di sapere come riparare il tavolo, suppongo di dover conoscere il motore (non sono arrivato così lontano per essere onesto.) Pertanto, il commento di @ Jocker qui sotto mi è stato molto più utile.
Harperville,

@Greg, dovremmo usare questa o la soluzione di Jocker?
Pacerier,

@Pacerier - Entrambi funzionano bene. La differenza è che questa soluzione fornisce le informazioni per una tabella, mentre la soluzione di Jocker mostra il tipo di motore per tutte le tabelle in un database (pur essendo anche un po 'più leggibile).
kramer65,

@Greg, A proposito perché non vengono visualizzate le informazioni sul motore quando lo facciamo show full columns from t1?
Pacerier,

236

Per mostrare un elenco di tutte le tabelle in un database e i relativi motori, utilizzare questa query SQL:

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

Sostituisci dbnamecon il nome del tuo database.


3
Questo è un ottimo b / c che filtra tutto tranne tablename e motore.
Tono,

1
Per ottenere il motore di una tabella specifica, è possibile utilizzare: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond

1
Questo mi dà un set vuoto su MySQL 5.6.37.
nnyby,

1
Questa è una risposta migliore perché è SQL vero, quindi posso fare cose come COUNT(*)e GROUP BY.
Brandon

47
SHOW CREATE TABLE <tablename>;

Meno analizzabile ma più leggibile di SHOW TABLE STATUS.



15

Un po 'di modifica alla risposta di Jocker (vorrei pubblicare come commento, ma non ho ancora abbastanza karma):

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

Ciò esclude le viste MySQL dall'elenco, che non hanno un motore.


9
SHOW CREATE TABLE <tablename>\G

lo formatterà molto meglio rispetto all'output di

SHOW CREATE TABLE <tablename>;

Il \Gtrucco è anche utile da ricordare per molte altre query / comandi.


1
\ G hack è solo sotto cli mysql
gaRex il

7
mysqlshow -i <database_name>

mostrerà le informazioni per tutte le tabelle di un database specifico.

mysqlshow -i <database_name> <table_name> 

lo farà solo per una tabella specifica.


1
Questo non risponde alla domanda perché visualizza i motori per tutte le tabelle. L'iniziatore della domanda stava cercando informazioni su una tabella specifica.
Tass

4

mostra lo stato della tabella da database_name;

Elencherà tutte le tabelle dal database menzionato.
Esempio di output

output di esempio di mysql db

mostra lo stato della tabella dove name = your_desired_table_name;

Mostrerà il motore di archiviazione utilizzato dalla tabella citata.


3

Se stai usando MySQL Workbench, puoi fare clic con il tasto destro del mouse sulla tabella e selezionare 'alter table'.

In quella finestra puoi vedere il tuo motore del tavolo e anche cambiarlo.


2

Ancora un altro modo, forse il più breve per ottenere lo stato di un set di tabelle singolo o abbinato:

SHOW TABLE STATUS LIKE 'table';

È quindi possibile utilizzare gli operatori LIKE ad esempio:

SHOW TABLE STATUS LIKE 'field_data_%';

2

Se sei un utente linux:

Per mostrare i motori per tutte le tabelle per tutti i database su un server MySQL, senza tabelle 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)

Potresti amarlo, almeno se sei su Linux.

Aprirà tutte le informazioni per tutte le tabelle less, premere -Sper tagliare linee troppo lunghe.

Esempio di output:

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

vai al database information_schema lì troverai la tabella 'tables' quindi selezionala;

Mysql> usa information_schema; Mysql> seleziona table_name, motore dalle tabelle;


0

Se sei un ragazzo della GUI e vuoi solo trovarlo in PhpMyAdmin , allora scegli il tavolo che preferisci e vai nella Operationsscheda >> Table options>> Storage Engine. Puoi anche cambiarlo da lì utilizzando l'elenco delle opzioni a discesa.

PS: questa guida si basa sulla versione 4.8 di PhpMyAdmin. Non posso garantire lo stesso percorso per versioni molto vecchie.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.