-
ENUM में मानों के सेट को बदलने के लिए
ALTER TABLE
. की आवश्यकता होती है जो एक तालिका पुनर्गठन का कारण बन सकता है - एक अविश्वसनीय रूप से महंगा ऑपरेशन (तालिका पुनर्गठन तब नहीं होता है जब आप ENUM परिभाषा के अंत में केवल एक नया मान जोड़ते हैं, लेकिन यदि आप एक को हटाते हैं, या ऑर्डर बदलते हैं, तो यह एक टेबल करता है पुनर्गठन)। जबकि लुकअप टेबल में मानों के सेट को बदलना INSERT या DELETE जितना आसान है। -
किसी ENUM में मानों के साथ अन्य विशेषताओं को जोड़ने का कोई तरीका नहीं है, जैसे कि कौन-सी विशेषताएँ सेवानिवृत्त हो चुकी हैं, और कौन-सी विशेषताएँ आपके उपयोगकर्ता इंटरफ़ेस में ड्रॉप-डाउन सूची में डालने के योग्य हैं। हालांकि, लुकअप टेबल में ऐसी विशेषताओं के लिए अतिरिक्त कॉलम शामिल हो सकते हैं।
-
विशिष्ट मानों की सूची प्राप्त करने के लिए किसी ENUM को क्वेरी करना बहुत कठिन है, मूल रूप से आपको
INFORMATION_SCHEMA
से डेटा प्रकार परिभाषा को क्वेरी करने की आवश्यकता होती है , और BLOB से सूची को पार्स करना वापस लौटा। आप कोशिश कर सकते हैंSELECT DISTINCT status
आपकी तालिका से, लेकिन वह केवल वर्तमान में उपयोग में आने वाले स्थिति मान प्राप्त करता है, जो कि ENUM में सभी मान नहीं हो सकते हैं। हालांकि, यदि आप लुकअप तालिका में मान रखते हैं, तो क्वेरी करना, क्रमित करना आदि आसान है।
मैं ENUM का बहुत बड़ा प्रशंसक नहीं हूं, जैसा कि आप बता सकते हैं। :-)
वही CHECK बाधाओं पर लागू होता है जो एक कॉलम की तुलना मूल्यों के एक निश्चित सेट से करते हैं। हालांकि MySQL वैसे भी CHECK बाधाओं का समर्थन नहीं करता है।
अपडेट:MySQL 8.0.16 अब CHECK लागू करता है बाधाएं ।