Как я узнаю, использует ли таблица mysql myISAM или InnoDB Engine?


86

В MySQL нет способа указать механизм хранения для определенной базы данных, только для отдельных таблиц. Однако вы можете указать механизм хранения, который будет использоваться во время одного сеанса, с помощью:

SET storage_engine=InnoDB;

Таким образом, вам не нужно указывать его для каждой таблицы.

Как мне подтвердить, действительно ли все таблицы используют InnoDB?


Ответы:


138

Если вы используете SHOW CREATE TABLE, вам нужно выделить движок из запроса.

Выбор из базы данных INFORMATION_SCHEMA - плохая практика, так как разработчики оставляют за собой право изменить ее схему в любое время (хотя это маловероятно).

Правильный запрос для использования - SHOW TABLE STATUS - вы можете получить информацию обо всех таблицах в базе данных:

SHOW TABLE STATUS FROM `database`;

Или для конкретной таблицы:

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

Один из столбцов, который вы получите обратно, - Двигатель.


+1, за исключением того, что у вас всегда есть разрешение на просмотр схемы информации для объектов, на которые у вас есть разрешение.
Konerak

@Konerak Ах, правда, я исправлю ответ. Кроме того, я видел некоторые ошибки, из-за которых выбор из information_schema не работал в случаях, когда у людей были правильные разрешения.
TehShrike,

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

Единственное предостережение - данные в INFORMATION_SCHEMA кэшируются, поэтому лучше всего использовать FLUSH TABLES до предоставленного вами утверждения
OMG Ponies

Это помогает мне подсчитать количество таблиц InnoDB в БД.
Anon30,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.