Làm cách nào để biết bảng mysql đang sử dụng myISAM hay InnoDB Engine?


85

Trong MySQL, không có cách nào để chỉ định công cụ lưu trữ cho một cơ sở dữ liệu nhất định, chỉ dành cho các bảng đơn lẻ. Tuy nhiên, bạn có thể chỉ định một công cụ lưu trữ sẽ được sử dụng trong một phiên với:

SET storage_engine=InnoDB;

Vì vậy, bạn không cần phải chỉ định nó cho mỗi bảng.

Làm cách nào để xác nhận, nếu thực sự tất cả các bảng đang sử dụng InnoDB?


Câu trả lời:


134

Nếu bạn sử dụng SHOW CREATE TABLE, bạn phải phân tích cú pháp công cụ ra khỏi truy vấn.

Việc lựa chọn từ cơ sở dữ liệu INFORMATION_SCHEMA là một thực tế không tốt, vì các nhà phát triển bảo lưu quyền thay đổi lược đồ của nó bất kỳ lúc nào (mặc dù điều đó là không chắc).

Truy vấn chính xác để sử dụng là HIỂN THỊ TRẠNG THÁI BẢNG - bạn có thể lấy thông tin về tất cả các bảng trong cơ sở dữ liệu:

SHOW TABLE STATUS FROM `database`;

Hoặc cho một bảng cụ thể:

SHOW TABLE STATUS FROM `database` LIKE 'tablename';

Một trong những cột bạn sẽ nhận lại là Động cơ.


+1, ngoại trừ bạn luôn có quyền xem lược đồ thông tin cho các đối tượng mà bạn có quyền.
Konerak

@Konerak Ah, đủ đúng - Tôi sẽ sửa câu trả lời. Ngoài ra, tôi đã thấy một số lỗi trong đó lựa chọn từ information_schema không hoạt động trong trường hợp mọi người có quyền chính xác.
TehShrike

15
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'

Chỉ báo trước là dữ liệu trong INFORMATION_SCHEMA được lưu vào bộ nhớ đệm, vì vậy tốt nhất bạn nên sử dụng FLUSH TABLES trước tuyên bố bạn đã cung cấp
OMG Ponies

Nó giúp tôi đếm không có bảng InnoDB trong DB.
Anon 30

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.