Как я узнаю, использует ли таблица 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,
2

show create table <table> должен сделать свое дело.

Мэтт Колдуэлл
источник