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?


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.


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.