Skąd mam wiedzieć, czy tabela mysql używa myISAM czy InnoDB Engine?

85

W MySQL nie ma możliwości określenia mechanizmu przechowywania dla określonej bazy danych, tylko dla pojedynczych tabel. Możesz jednak określić mechanizm przechowywania danych, który ma być używany podczas jednej sesji:

SET storage_engine=InnoDB;

Nie musisz więc określać tego dla każdej tabeli.

Jak mogę sprawdzić, czy rzeczywiście wszystkie tabele używają InnoDB?

kamal
źródło

Odpowiedzi:

134

Jeśli używasz SHOW CREATE TABLE, musisz przeanalizować silnik z zapytania.

Wybór z bazy danych INFORMATION_SCHEMA jest złą praktyką, ponieważ twórcy zastrzegają sobie prawo do zmiany schematu w dowolnym momencie (choć jest to mało prawdopodobne).

Prawidłowe zapytanie to SHOW TABLE STATUS - możesz uzyskać informacje o wszystkich tabelach w bazie danych:

SHOW TABLE STATUS FROM `database`;

Lub dla konkretnego stołu:

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

Jedną z kolumn, które odzyskasz, jest Silnik.

TehShrike
źródło
+1, z tym że zawsze masz uprawnienia do wyświetlania schematu informacji o obiektach, do których masz uprawnienia.
Konerak
@Konerak Ach, to prawda - poprawię odpowiedź. Na marginesie, widziałem kilka błędów, w których wybieranie ze schematu information_schema nie działało w przypadkach, gdy ludzie mieli odpowiednie uprawnienia.
TehShrike
15
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'
Scrum Meister
źródło
Jedynym zastrzeżeniem jest to, że dane w INFORMATION_SCHEMA są zapisywane w pamięci podręcznej, więc najlepiej użyć FLUSH TABLES przed podanym oświadczeniem
OMG Kucyki
Pomaga mi to policzyć liczbę tabel InnoDB w DB.
Anon 30
2

show create table <table> powinien załatwić sprawę.

Matt Caldwell
źródło