Как я могу проверить тип движка MySQL для конкретной таблицы?

391

Моя база данных MySQL содержит несколько таблиц, использующих разные механизмы хранения (в частности, myisam и innodb). Как я могу узнать, какие таблицы используют какой движок?

себя
источник

Ответы:

507

SHOW TABLE STATUS WHERE Name = 'xxx'

Это даст вам (среди прочего) Engineстолбец, который вы хотите.

Greg
источник
4
Если моя таблица повреждена, она просто показывает Engine = NULL и имеет «Комментарий», говорящий мне о восстановлении таблицы. Однако, прежде чем я узнаю, как починить стол, я думаю, что мне нужно знать движок (если честно, я пока не дошел до этого.) Поэтому комментарий @ Джокера ниже был для меня гораздо более полезным.
Harperville
@ Грег, мы должны использовать это или решение Джокера?
Pacerier
@Pacerier - оба работают нормально. Разница в том, что это решение предоставляет информацию для одной таблицы, а решение Джокера показывает тип механизма для всех таблиц в базе данных (хотя и немного более читабельно).
kramer65
@ Грег, кстати, почему информация о двигателе не отображается, когда мы это делаем show full columns from t1?
Pacerier
236

Чтобы показать список всех таблиц в базе данных и их движках, используйте этот запрос SQL:

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

Замените dbnameна имя вашей базы данных.

Jocker
источник
3
Это здорово, потому что он отфильтровывает все, кроме имени таблицы и движка.
Тон
1
Чтобы получить движок конкретной таблицы, вы можете использовать: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond
1
Это дает мне пустой набор на MySQL 5.6.37.
nnyby
1
Это лучший ответ, потому что это настоящий SQL, поэтому я могу делать такие вещи, как COUNT(*)и GROUP BY.
Брэндон
47
SHOW CREATE TABLE <tablename>;

Менее разборчиво, но более читабельно, чем SHOW TABLE STATUS.

Хавьер
источник
41

или просто

show table status;

только это будет перечислять все таблицы в вашей базе данных.

Марк Гуадалупе
источник
2
@NikolaiSamteladze, у тебя есть таблицы в выбранной БД?
Pacerier
15

Немного подправил ответ Джокера (я бы написал как комментарий, но мне пока не хватает кармы):

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

Это исключает представления MySQL из списка, у которых нет движка.

Эван Донован
источник
9
SHOW CREATE TABLE <tablename>\G

отформатирует его намного лучше по сравнению с выводом

SHOW CREATE TABLE <tablename>;

\GТрюк также полезно помнить , для многих других запросов / команд.

Николас
источник
1
\ G взломать только под cli mysql
gaRex
7
mysqlshow -i <database_name>

покажет информацию для всех таблиц конкретной базы данных.

mysqlshow -i <database_name> <table_name> 

будет делать это только для конкретной таблицы.

магия
источник
1
Это не отвечает на вопрос, потому что он отображает движки для всех таблиц. Инициатор вопроса искал информацию относительно конкретной таблицы.
ТАСС
4

показать статус таблицы из database_name;

В нем будут перечислены все таблицы из указанной базы данных.
Пример вывода

пример выходных данных MySQL DB

показать статус таблицы, где name = your_desired_table_name;

Это покажет механизм хранения, используемый упомянутой таблицей.

захид
источник
3

Если вы используете MySQL Workbench, вы можете щелкнуть правой кнопкой мыши по таблице и выбрать «изменить таблицу».

В этом окне вы можете увидеть вашу таблицу Engine, а также изменить ее.

T30
источник
2

Еще один способ, возможно самый короткий, чтобы получить статус одного или соответствующего набора таблиц:

SHOW TABLE STATUS LIKE 'table';

Затем вы можете использовать LIKE операторы, например:

SHOW TABLE STATUS LIKE 'field_data_%';
Дэвид Томас
источник
2

Если вы являетесь пользователем Linux:

Для того, чтобы показать двигатели для всех таблиц для всех баз данных на сервере MySQL, без таблиц 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)

Тебе это может понравиться, если ты на Linux, по крайней мере.

Откроется вся информация для всех таблиц less, нажмите-S чтобы нарезать слишком длинные строки.

Пример вывода:

--------------------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
источник
0

перейдите в базу данных information_schema, там вы найдете таблицу 'таблиц' и выберите ее;

Mysql> use information_schema; Mysql> выбрать table_name, движок из таблиц;

Харша Вардхан
источник
0

Если вы парень с графическим интерфейсом и просто хотите найти его в PhpMyAdmin , выберите нужную таблицу и Operationsперейдите на вкладку >> Table options>> Storage Engine. Вы даже можете изменить его, используя раскрывающийся список опций.

PS: это руководство основано на версии 4.8 PhpMyAdmin. Не может гарантировать тот же путь для очень старых версий.

mytuny
источник