मुझे कैसे पता चलेगा कि mysql तालिका myISAM या InnoDB इंजन का उपयोग कर रही है?


85

MySQL में, एक निश्चित डेटाबेस के लिए स्टोरेज इंजन को निर्दिष्ट करने का कोई तरीका नहीं है, केवल सिंगल टेबल के लिए। हालाँकि, आप एक सत्र के दौरान उपयोग किए जाने वाले भंडारण इंजन को निर्दिष्ट कर सकते हैं:

SET storage_engine=InnoDB;

इसलिए आपको इसे प्रत्येक तालिका के लिए निर्दिष्ट करने की आवश्यकता नहीं है।

अगर मैं वास्तव में सभी तालिकाओं का उपयोग कर रहा हूँ, तो मैं कैसे पुष्टि करूँ?


जवाबों:


134

यदि आप SHOW CREATE TABLE का उपयोग करते हैं, तो आपको इंजन को क्वेरी से बाहर पार्स करना होगा।

INFORMATION_SCHEMA डेटाबेस से चयन करना खराब अभ्यास है, क्योंकि देवता किसी भी समय (हालांकि यह संभावना नहीं है) अपने स्कीमा को बदलने का अधिकार सुरक्षित रखते हैं।

उपयोग करने के लिए सही क्वेरी शो टेबल टेबल है - आप एक डेटाबेस में सभी तालिकाओं के बारे में जानकारी प्राप्त कर सकते हैं:

SHOW TABLE STATUS FROM `database`;

या एक विशिष्ट तालिका के लिए:

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

आपको जो कॉलम मिलेंगे उनमें से एक इंजन है।


+1, सिवाय आपके पास हमेशा उन वस्तुओं के लिए सूचना स्कीमा देखने की अनुमति है, जिनके लिए आपके पास अनुमति है।
कोनरक

@Konerak आह, काफी सच है - मैं जवाब सही कर दूंगा। एक तरफ के रूप में, मैंने कुछ बग देखे हैं जहां information_schema से चयन उन मामलों में काम नहीं करता था जहां लोगों के पास सही अनुमति थी।
तेहरसीके

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

केवल सूचना INFORMATION_SCHEMA में डेटा कैश्ड है, इसलिए आपके द्वारा दिए गए बयान से पहले FLUSH TABLES का उपयोग करना सबसे अच्छा है
OMG Ponies

यह मुझे DB में InnoDB तालिकाओं की संख्या गिनने में मदद करता है।
Anon30

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.