वास्तव में, ENUM कॉलम स्पेसिफिकेशन में सूचीबद्ध तत्वों को इंडेक्स नंबर दिए जाते हैं जो 1 से शुरू होते हैं। यहां "इंडेक्स" शब्द एन्यूमरेशन मानों की सूची के भीतर स्थिति की ओर इंगित करता है और वे टेबल इंडेक्स से संबंधित नहीं हैं। निम्नलिखित उदाहरणों की मदद से हम दिखा सकते हैं कि प्रत्येक MySQL एन्यूमरेशन का एक इंडेक्स मान होता है:
एन्यूमरेशन मान के बजाय इंडेक्स नंबर डालकर
हम ENUM कॉलम में मानों को उनके इंडेक्स नंबर की मदद से डाल सकते हैं बजाय मान लिखने के। उदाहरण के लिए, नीचे दी गई टेबल में हमारे पास दो ENUM मान 'pass' और 'fail' हैं। चूंकि 'pass' एन्यूमरेशन सूची में पहले लिखा गया है इसलिए इसे इंडेक्स नंबर '1' मिला और 'fail' के लिए '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)
उपरोक्त क्वेरी में, हमने एन्यूमरेशन मान pass और fail के लिए क्रमशः इंडेक्स नंबर 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) उपरोक्त क्वेरी के आउटपुट से, यह स्पष्ट है कि खाली स्ट्रिंग का इंडेक्स मान 0 है।
एन्यूमरेशन मान के बजाय NULL डालकर
हम एन्यूमरेशन मानों के स्थान पर NULL डाल सकते हैं क्योंकि हम ENUM कॉलम के साथ NOT NULL निर्दिष्ट नहीं करते हैं। NULL का इंडेक्स मान NULL होता है। उदाहरण के लिए, निम्नलिखित क्वेरी की मदद से हम टेबल 'result' के एन्यूमरेशन कॉलम में NULL डालते हैं और इसके इंडेक्स मान की जांच कर सकते हैं।
mysql> Create table result(Id INT PRIMARY KEY NOT NULL, Name Varchar(10), Grade ENUM('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)