Làm cách nào để kiểm tra loại công cụ MySQL cho một bảng cụ thể?


391

Cơ sở dữ liệu MySQL của tôi chứa một số bảng sử dụng các công cụ lưu trữ khác nhau (cụ thể là myisam và innodb). Làm thế nào tôi có thể tìm ra các bảng đang sử dụng công cụ nào?

Câu trả lời:


507

SHOW TABLE STATUS WHERE Name = 'xxx'

Điều này sẽ cung cấp cho bạn (trong số những thứ khác) một Enginecột, đó là những gì bạn muốn.


4
Nếu bảng của tôi bị hỏng, nó chỉ hiển thị Engine = NULL và có "Nhận xét" bảo tôi sửa chữa bảng. Tuy nhiên, trước khi tôi biết cách sửa chữa bàn, tôi đoán tôi cần biết động cơ (tôi đã không thành thật đến mức đó.) Vì vậy, nhận xét của @ Jocker dưới đây hữu ích hơn nhiều đối với tôi.
harperville

@Greg, chúng ta nên sử dụng giải pháp này hay Jocker?
Pacerier 24/2/2015

@Pacerier - Cả hai đều hoạt động tốt. Sự khác biệt là giải pháp này cung cấp thông tin cho một bảng, trong khi giải pháp của Jocker hiển thị loại động cơ cho tất cả các bảng trong cơ sở dữ liệu (đồng thời cũng dễ đọc hơn một chút).
kramer65

@Greg, Btw tại sao thông tin động cơ không hiển thị khi chúng tôi làm show full columns from t1?
Pacerier

236

Để hiển thị danh sách tất cả các bảng trong cơ sở dữ liệu và các công cụ của chúng, hãy sử dụng truy vấn SQL này:

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

Thay thế dbnamebằng tên cơ sở dữ liệu của bạn.


3
Điều này thật tuyệt vời vì nó lọc ra mọi thứ trừ tablename và engine.
Giai điệu

1
Để lấy công cụ của bảng cụ thể, bạn có thể sử dụng: SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<database_name>' AND TABLE_NAME = '<table_name>'
userlond

1
Điều này mang lại cho tôi một bộ trống trên MySQL 5.6.37.
nnyby

1
Đây là một câu trả lời tốt hơn vì đó là SQL thực sự, vì vậy tôi có thể làm những việc như COUNT(*)GROUP BY.
Brandon

47
SHOW CREATE TABLE <tablename>;

Ít phân tích hơn nhưng dễ đọc hơn SHOW TABLE STATUS.


41

hoặc chỉ

show table status;

chỉ cần điều này sẽ liệt kê tất cả các bảng trên cơ sở dữ liệu của bạn.


2
@NikolaiSamteladze, Bạn có bảng trong db đã chọn không?
Pacerier 24/2/2015

15

Một chút điều chỉnh theo phản hồi của Jocker (tôi sẽ đăng dưới dạng nhận xét, nhưng tôi chưa có đủ nghiệp lực):

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

Điều này loại trừ lượt xem MySQL khỏi danh sách, không có công cụ.


9
SHOW CREATE TABLE <tablename>\G

sẽ định dạng nó đẹp hơn nhiều so với đầu ra của

SHOW CREATE TABLE <tablename>;

Thủ \Gthuật này cũng hữu ích để ghi nhớ cho nhiều truy vấn / lệnh khác.


1
\ G hack chỉ dưới cli mysql
gaRex

7
mysqlshow -i <database_name>

sẽ hiển thị thông tin cho tất cả các bảng của một cơ sở dữ liệu cụ thể.

mysqlshow -i <database_name> <table_name> 

sẽ làm như vậy chỉ cho một bảng cụ thể.


1
Điều này không trả lời câu hỏi vì nó hiển thị các công cụ cho tất cả các bảng. Người khởi xướng câu hỏi đang tìm kiếm thông tin liên quan đến một bảng cụ thể.
Tass

4

hiển thị trạng thái bảng từ cơ sở dữ liệu;

Nó sẽ liệt kê tất cả các bảng từ cơ sở dữ liệu được đề cập.
Ví dụ đầu ra

đầu ra mẫu của mysql db

hiển thị trạng thái bảng trong đó name = your_desired_table_name;

Nó sẽ hiển thị công cụ lưu trữ được sử dụng bởi bảng đã đề cập.


3

Nếu bạn đang sử dụng Bàn làm việc của MySQL, bạn có thể nhấp chuột phải vào bảng và chọn 'thay đổi bảng'.

Trong cửa sổ đó, bạn có thể thấy Công cụ bảng của mình và cũng thay đổi nó.


2

Một cách khác, có lẽ là ngắn nhất để có được trạng thái của một tập hợp các bảng hoặc khớp:

SHOW TABLE STATUS LIKE 'table';

Sau đó, bạn có thể sử dụng các toán tử THÍCH:

SHOW TABLE STATUS LIKE 'field_data_%';

2

Nếu bạn là người dùng linux:

Để hiển thị các công cụ cho tất cả các bảng cho tất cả các cơ sở dữ liệu trên máy chủ mysql, mà không có bàn 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)

Bạn có thể thích điều này, nếu bạn đang ở trên linux, ít nhất.

Sẽ mở tất cả thông tin cho tất cả các bảng trong less, nhấn -Sđể cắt các dòng quá dài.

Ví dụ đầu ra:

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

đi đến cơ sở dữ liệu information_schema ở đó bạn sẽ tìm thấy bảng 'bảng' sau đó chọn nó;

Mysql> sử dụng information_schema; Mysql> chọn tên_bảng, công cụ từ các bảng;


0

Nếu bạn là một anh chàng GUI và chỉ muốn tìm thấy nó trong PhpMyAdmin , hãy chọn bảng bạn chọn và đi qua Operationstab >> Table options>> Storage Engine. Bạn thậm chí có thể thay đổi nó từ đó bằng cách sử dụng danh sách tùy chọn thả xuống.

PS: Hướng dẫn này dựa trên phiên bản 4.8 của PhpMyAdmin. Không thể đảm bảo đường dẫn tương tự cho các phiên bản rất cũ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.