Як я можу перевірити тип двигуна MySQL для конкретної таблиці?


391

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

Відповіді:


507

SHOW TABLE STATUS WHERE Name = 'xxx'

Це дасть вам (серед іншого) Engineстовпець, який ви хочете.


4
Якщо мій стіл пошкоджений, він просто показує Engine = NULL і має "Коментар", який говорить мені про ремонт таблиці. Однак, перш ніж я знаю, як відремонтувати стіл, я здогадуюсь, що мені потрібно знати двигун (я ще далеко не дійшов, щоб бути чесним.) Тому коментар @ Jocker нижче був набагато кориснішим для мене.
harperville

@Greg, чи слід використовувати це чи рішення Джокера?
Pacerier

@Pacerier - Обидва працюють добре. Різниця полягає в тому, що це рішення надає інформацію для однієї таблиці, тоді як рішення Джокера показує тип двигуна для всіх таблиць у базі даних (при цьому він також трохи читабельніший).
kramer65

@Greg, Btw, чому інформація про двигун не з’являється, коли ми це робимо show full columns from t1?
Pacerier

236

Щоб показати список усіх таблиць у базі даних та їх двигунів, використовуйте цей SQL-запит:

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

Замініть dbnameна ім’я бази даних.


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, Чи є у вас таблиці у вибраному db?
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
Це не відповідає на питання, оскільки відображає двигуни для всіх таблиць. Ініціатор питання шукав інформацію стосовно конкретної таблиці.
Tass

4

показати стан таблиці від імені бази даних;

У ньому будуть перераховані всі таблиці згаданої бази даних.
Приклад виведення

Вибірка зразка mysql db

покажіть стан таблиці, де ім'я = ваше_надійне_таблиця;

Він покаже двигун зберігання даних, який використовується згаданою таблицею.


3

Якщо ви використовуєте MySQL Workbench, можете клацнути правою кнопкою миші таблицю і вибрати "змінити таблицю".

У цьому вікні ви можете побачити двигун таблиці, а також змінити її.


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 

.
.
.

0

перейдіть у базу даних information_schema, там ви знайдете таблицю "таблиць" і виберіть її;

Mysql> використовувати information_schema; Mysql> виберіть ім'я таблиці, двигун із таблиць;


0

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

PS: Цей посібник базується на версії 4.8 PhpMyAdmin. Не можна гарантувати той самий шлях для дуже старих версій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.