Bagaimana saya bisa memeriksa tipe mesin MySQL untuk tabel tertentu?

391

Basis data MySQL saya berisi beberapa tabel menggunakan mesin penyimpanan yang berbeda (khususnya myisam dan innodb). Bagaimana saya bisa mengetahui tabel mana yang menggunakan mesin yang mana?

diri
sumber

Jawaban:

507

SHOW TABLE STATUS WHERE Name = 'xxx'

Ini akan memberi Anda (antara lain) Enginekolom, yang Anda inginkan.

Greg
sumber
4
Jika meja saya rusak, itu hanya menunjukkan Engine = NULL dan memiliki "Komentar" yang memberitahu saya untuk memperbaiki tabel. Namun, sebelum saya tahu cara memperbaiki meja, saya kira saya perlu tahu mesinnya (saya belum sampai sejauh itu jujur.) Oleh karena itu, komentar @ Jocker di bawah ini jauh lebih membantu bagi saya.
harperville
@ Greg, Haruskah kita menggunakan ini atau solusi Jocker?
Pacerier
@Pacerier - Keduanya berfungsi dengan baik. Perbedaannya adalah bahwa solusi ini memberikan info untuk satu tabel, sedangkan solusi Jocker menunjukkan jenis mesin untuk semua tabel dalam database (sambil sedikit lebih mudah dibaca juga).
kramer65
@Reg, Btw mengapa info mesin tidak muncul ketika kita melakukannya show full columns from t1?
Pacerier
236

Untuk menampilkan daftar semua tabel dalam database dan mesinnya, gunakan kueri SQL ini:

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

Ganti dbnamedengan nama database Anda.

Jocker
sumber
3
Ini bagus b / c filter semuanya kecuali tablename dan mesin.
Nada
1
Untuk mendapatkan engine dari tabel tertentu, Anda dapat menggunakan: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond
1
Ini memberi saya set kosong pada MySQL 5.6.37.
nnyby
1
Ini adalah jawaban yang lebih baik karena itu benar SQL, jadi saya bisa melakukan hal-hal seperti COUNT(*)dan GROUP BY.
Brandon
47
SHOW CREATE TABLE <tablename>;

Kurang parseabel tetapi lebih mudah dibaca daripada SHOW TABLE STATUS.

Javier
sumber
41

atau hanya

show table status;

Hanya saja ini akan mendaftar semua tabel di database Anda.

Tuan Guadalupe
sumber
2
@NikolaiSamteladze, Apakah Anda punya tabel di db yang dipilih?
Pacerier
15

Sedikit perubahan pada respons Jocker (saya akan memposting sebagai komentar, tetapi saya belum memiliki cukup karma):

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

Ini tidak termasuk tampilan MySQL dari daftar, yang tidak memiliki mesin.

Evan Donovan
sumber
9
SHOW CREATE TABLE <tablename>\G

akan memformatnya jauh lebih bagus dibandingkan dengan keluaran

SHOW CREATE TABLE <tablename>;

The \GTrik ini juga berguna untuk mengingat selama bertahun-lain permintaan / perintah.

Nicholas
sumber
1
\ G hack hanya di bawah cli mysql
gaRex
7
mysqlshow -i <database_name>

akan menampilkan info untuk semua tabel dari basis data tertentu.

mysqlshow -i <database_name> <table_name> 

akan melakukannya hanya untuk tabel tertentu.

sihir
sumber
1
Ini tidak menjawab pertanyaan karena menampilkan mesin untuk semua tabel. Penggagas pertanyaan itu sedang mencari informasi mengenai tabel tertentu.
Tass
4

tampilkan status tabel dari database_name;

Ini akan mencantumkan semua tabel dari database yang disebutkan.
Contoh output

contoh output dari mysql db

perlihatkan status tabel tempat name = your_desired_table_name;

Ini akan menunjukkan mesin penyimpanan yang digunakan oleh tabel yang disebutkan.

zahid
sumber
3

Jika Anda menggunakan MySQL Workbench, Anda dapat mengklik kanan tabel dan memilih 'alter table'.

Di jendela itu Anda bisa melihat Mesin meja Anda dan juga mengubahnya.

T30
sumber
2

Namun cara lain, mungkin yang terpendek untuk mendapatkan status satu set atau satu set tabel yang cocok:

SHOW TABLE STATUS LIKE 'table';

Anda kemudian dapat menggunakan LIKE operator misalnya:

SHOW TABLE STATUS LIKE 'field_data_%';
David Thomas
sumber
2

Jika Anda adalah pengguna linux:

Untuk menunjukkan mesin untuk semua tabel untuk semua database pada server mysql, tanpa meja 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)

Anda mungkin suka ini, jika Anda menggunakan linux, setidaknya.

Akan membuka semua info untuk semua tabel less, tekan -Suntuk memotong garis yang terlalu panjang.

Contoh 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 

.
.
.
sja
sumber
0

buka database information_schema di sana Anda akan menemukan tabel 'tabel' lalu pilih;

Mysql> gunakan information_schema; Mysql> pilih table_name, engine from tables;

harsha vardhan
sumber
0

Jika Anda seorang pria GUI dan hanya ingin menemukannya di PhpMyAdmin , daripada memilih tabel pilihan Anda dan menuju ke Operationstab >> Table options>> Storage Engine. Anda bahkan dapat mengubahnya dari sana menggunakan daftar opsi drop-down.

PS: Panduan ini didasarkan pada PhpMyAdmin versi 4.8. Tidak dapat menjamin jalur yang sama untuk versi yang sangat lama.

mytuny
sumber