Bir mysql tablosunun myISAM veya InnoDB Engine kullandığını nasıl anlarım?


86

MySQL'de, belirli bir veritabanı için yalnızca tek tablolar için bir depolama motoru belirtmenin bir yolu yoktur. Ancak, aşağıdakilerle bir oturumda kullanılacak bir depolama motorunu belirtebilirsiniz:

SET storage_engine=InnoDB;

Böylece her tablo için bunu belirtmeniz gerekmez.

Gerçekten tüm tabloların InnoDB kullanıp kullanmadığını nasıl teyit ederim?


Yanıtlar:


138

SHOW CREATE TABLE kullanıyorsanız, motoru sorgudan ayrıştırmanız gerekir.

DevelopATION_SCHEMA veritabanından seçim yapmak, geliştiriciler şemasını herhangi bir zamanda değiştirme hakkını saklı tuttuğundan (pek olası olmasa da) kötü bir uygulamadır.

Kullanılacak doğru sorgu TABLO DURUMUNU GÖSTER şeklindedir - bir veritabanındaki tüm tablolar hakkında bilgi alabilirsiniz:

SHOW TABLE STATUS FROM `database`;

Veya belirli bir tablo için:

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

Geri alacağınız sütunlardan biri Motor.


+1, ancak her zaman izniniz olan nesneler için bilgi şemasını görme izniniz vardır.
Konerak

@Konerak Ah, yeterince doğru - Cevabı düzelteceğim. Bir kenara, insanların doğru izinlere sahip olduğu durumlarda information_schema'dan seçim yapmanın işe yaramadığı bazı hatalar gördüm .
TehShrike

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

Yalnızca bilgi INFORMATION_SCHEMA'daki veriler önbelleğe alınır, bu nedenle , sağladığınız ifadeden önce FLUSH TABLES kullanmak en iyisidir
OMG Ponies

DB'deki InnoDB tablolarının sayısını saymama yardımcı oluyor.
Anon30

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.