दरअसल, ENUM कॉलम विनिर्देशों में सूचीबद्ध तत्वों को इंडेक्स नंबर दिए गए हैं जो 1 से शुरू होते हैं। यहां "इंडेक्स" शब्द गणना मूल्यों की सूची के भीतर स्थिति की ओर संकेत कर रहा है और वे टेबल इंडेक्स से संबंधित नहीं हैं। निम्नलिखित उदाहरणों की सहायता से हम दिखा सकते हैं कि प्रत्येक MySQL एन्यूमरेशन का एक इंडेक्स वैल्यू होता है -
गणना मान के बजाय अनुक्रमणिका संख्या डालने से
हम ENUM कॉलम में मानों को लिखने के बजाय उनकी अनुक्रमणिका संख्याओं की सहायता से सम्मिलित कर सकते हैं। उदाहरण के लिए, नीचे दी गई तालिका में हमारे पास दो ENUM मान 'पास' और 'असफल' हैं। चूंकि गणना सूची में सबसे पहले 'पास' लिखा जाता है इसलिए इंडेक्स नंबर '1' मिलता है और यह 'फेल' के लिए '2' होगा। अब हम निम्न प्रकार से इंडेक्स नंबर डालकर भी मान सम्मिलित कर सकते हैं -
mysql> Insert into marks(id,name,result)values(103,'Daksh','1'); Query OK, 1 row affected (0.06 sec) mysql> Insert into marks(id,name,result)values(104,'Shayra','2'); Query OK, 1 row affected (0.07 sec) mysql> Select * from marks; +-----+---------+--------+ | id | Name | Result | +-----+---------+--------+ | 101 | Aarav | Pass | | 102 | Yashraj | Fail | | 103 | Daksh | Pass | | 104 | Shayra | Fail | +-----+---------+--------+ 4 rows in set (0.00 sec)
ऊपर दिए गए प्रश्नों में, हमने क्रमशः पास और फेल होने वाले एन्यूमरेशन वैल्यू के लिए इंडेक्स नंबर 1 और 2 का इस्तेमाल किया है।
गणना मान के बजाय खाली स्ट्रिंग डालने से
खाली स्ट्रिंग का अनुक्रमणिका मान 0 है। खाली स्ट्रिंग डालने से पहले, SQL मोड TRADITIONAL, STRICT_TRANS_TABLES या STRICT_ALL_TABLES नहीं होना चाहिए। निम्नलिखित उदाहरण की सहायता से हम इसे समझ सकते हैं -
mysql> SET SESSION sql_mode = ''; Query OK, 0 rows affected (0.00 sec) mysql> Insert into marks(id, name, result) values(105,'Yashraj',''); Query OK, 1 row affected, 1 warning (0.06 sec)
उपरोक्त क्वेरी एन्यूमरेशन मान के स्थान पर खाली स्ट्रिंग सम्मिलित करेगी। MySQL निम्न चेतावनी के साथ खाली स्ट्रिंग सम्मिलित करता है।
mysql> Show warnings; +---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1265 | Data truncated for column 'Result' at row 1 | +---------+------+---------------------------------------------+ 1 row in set (0.00 sec)
अब जब हम तालिका की जाँच करते हैं, तो हम ENUM फ़ील्ड में एक खाली स्ट्रिंग देख सकते हैं।
mysql> Select * from marks; +-----+---------+--------+ | id | Name | Result | +-----+---------+--------+ | 101 | Aarav | Pass | | 102 | Yashraj | Fail | | 103 | Daksh | Pass | | 104 | Shayra | Fail | | 105 | Yash | | +-----+---------+--------+ 5 rows in set (0.00 sec) mysql> Select result+0 As result_index from marks; +--------------+ | result_index | +--------------+ | 1 | | 2 | | 1 | | 2 | | 0 | +--------------+ 5 rows in set (0.01 sec) From the output of above query, it is clear that the index value of the empty string is 0.
गणना मान के बजाय NULL डालकर
हम गणना मानों के स्थान पर NULL सम्मिलित कर सकते हैं क्योंकि हम ENUM कॉलम के साथ NOT NULL निर्दिष्ट नहीं करते हैं। NULL का अनुक्रमणिका मान NULL है। उदाहरण के लिए, निम्नलिखित क्वेरी की सहायता से, हम तालिका 'परिणाम' के गणना कॉलम में NULL डालते हैं और इसके सूचकांक मूल्य की जांच कर सकते हैं।
mysql> Create table result(Id INT PRIMARY KEY NOT NULL, Name Varchar(10), GradeENUM('POOR','GOOD')); Query OK, 0 rows affected (0.25 sec) mysql> Insert into result(id, name, grade) values(100, 'Rahul', NULL); Query OK, 1 row affected (0.06 sec)
ऊपर की क्वेरी गणना मूल्य के स्थान पर NULL मान सम्मिलित करती है जिसे नीचे दी गई सहायता क्वेरी के साथ जांचा जा सकता है -
mysql> Select * from result; +-----+-------+-------+ | Id | Name | Grade | +-----+-------+-------+ | 100 | Rahul | NULL | +-----+-------+-------+ 1 row in set (0.00 sec)
अब, अगली क्वेरी की मदद से, हम देख सकते हैं कि NULL का इंडेक्स वैल्यू NULL है।
mysql> Select Grade+0 As Grade_index from result; +-------------+ | Grade_index | +-------------+ | NULL | +-------------+ 1 row in set (0.00 sec)