Jak mogę sprawdzić typ silnika MySQL dla konkretnej tabeli?


391

Moja baza danych MySQL zawiera kilka tabel używających różnych silników pamięci (w szczególności myisam i innodb). Jak mogę dowiedzieć się, które tabele używają danego silnika?

Odpowiedzi:


507

SHOW TABLE STATUS WHERE Name = 'xxx'

To da ci (między innymi) Enginekolumnę, która jest tym, czego chcesz.


4
Jeśli mój stół jest uszkodzony, pokazuje po prostu Engine = NULL i ma „Komentarz”, który każe mi naprawić stół. Zanim jednak dowiem się, jak naprawić tabelę, domyślam się, że muszę znać silnik (szczerze mówiąc, nie zaszedłem tak daleko). Dlatego poniższy komentarz @ Jockera był dla mnie o wiele bardziej pomocny.
harperville

@Greg, czy powinniśmy skorzystać z tego rozwiązania Jockera?
Pacerier

@Pacerier - Oba działają dobrze. Różnica polega na tym, że to rozwiązanie podaje informacje dla jednej tabeli, podczas gdy rozwiązanie Jockera pokazuje typ silnika dla wszystkich tabel w bazie danych (choć jest również nieco bardziej czytelny).
kramer65

@Greg, Btw dlaczego informacje o silniku nie pojawiają się, kiedy to robimy show full columns from t1?
Pacerier

236

Aby wyświetlić listę wszystkich tabel w bazie danych i ich silnikach, użyj tego zapytania SQL:

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

Zamień dbnamena nazwę swojej bazy danych.


3
To jest świetne, ale filtruje wszystko oprócz tablename i silnika.
Ton

1
Aby uzyskać silnik określonej tabeli, możesz użyć: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond

1
To daje mi pusty zestaw na MySQL 5.6.37.
nnyby

1
To lepsza odpowiedź, ponieważ jest to prawdziwy SQL, więc mogę robić takie rzeczy jak COUNT(*)i GROUP BY.
Brandon,

47
SHOW CREATE TABLE <tablename>;

Mniej analizowalny, ale bardziej czytelny niż SHOW TABLE STATUS.


41

Lub tylko

show table status;

po prostu spowoduje to wyświetlenie listy wszystkich tabel w bazie danych.


2
@NikolaiSamteladze, Czy masz tabele w wybranej bazie danych?
Pacerier

15

Drobne poprawki w odpowiedzi Jockera (opublikowałbym jako komentarz, ale nie mam jeszcze dość karmy):

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

Wyklucza to widoki MySQL z listy, które nie mają silnika.


9
SHOW CREATE TABLE <tablename>\G

sformatuje go o wiele ładniej w porównaniu do wyjścia

SHOW CREATE TABLE <tablename>;

\GSztuką jest również przydatny do zapamiętania dla wielu innych zapytań / poleceń.


1
\ G hack jest tylko pod cli mysql
gaRex

7
mysqlshow -i <database_name>

pokaże informacje dla wszystkich tabel konkretnej bazy danych.

mysqlshow -i <database_name> <table_name> 

zrobi to tylko dla konkretnego stołu.


1
To nie odpowiada na pytanie, ponieważ wyświetla silniki dla wszystkich tabel. Inicjator pytania szukał informacji dotyczących konkretnej tabeli.
Tass

4

pokaż status tabeli z nazwa_bazy_danych;

Wyświetli listę wszystkich tabel ze wspomnianej bazy danych.
Przykładowe dane wyjściowe

przykładowe dane wyjściowe mysql db

pokaż status tabeli gdzie nazwa = twoja_nazwa_tabeli;

Pokaże silnik pamięci używany przez wspomnianą tabelę.


3

Jeśli korzystasz z MySQL Workbench, możesz kliknąć tabelę prawym przyciskiem myszy i wybrać „zmień tabelę”.

W tym oknie możesz zobaczyć swój silnik tabeli, a także go zmienić.


2

Jeszcze inny sposób, być może najkrótszy, aby uzyskać status pojedynczego lub dopasowanego zestawu tabel:

SHOW TABLE STATUS LIKE 'table';

Następnie możesz użyć operatorów LIKE, na przykład:

SHOW TABLE STATUS LIKE 'field_data_%';

2

Jeśli jesteś użytkownikiem systemu Linux:

Aby pokazać silniki dla wszystkich tabel dla wszystkich baz danych na serwerze MySQL, bez tabel 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)

Możesz to pokochać, przynajmniej na Linuksie.

Otworzy wszystkie informacje dla wszystkich tabel w less, naciśnij, -Saby posiekać zbyt długie linie.

Przykładowe dane wyjściowe:

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

przejdź do bazy danych information_schema, znajdziesz tabelę „tabele”, a następnie wybierz ją;

Mysql> use information_schema; Mysql> wybierz nazwę_tabeli, silnik z tabel;


0

Jeśli jesteś facetem z GUI i po prostu chcesz go znaleźć w PhpMyAdmin , to wybierz tabelę i Operationsprzejdź do zakładki >> Table options>> Storage Engine. Możesz nawet zmienić go stamtąd za pomocą rozwijanej listy opcji.

PS: Niniejszy przewodnik oparty jest na wersji 4.8 PhpMyAdmin. Nie można zagwarantować tej samej ścieżki dla bardzo starszych wersji.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.