SQL मधील डेटा प्रकारांचा परिचय
JavaScript च्या विपरीत, SQL मध्ये मजबूत टायपिंग आहे. प्रत्येक टेबलमध्ये, प्रत्येक स्तंभाचा स्वतःचा निश्चित डेटा प्रकार असतो.
तेथे बरेच डेटा प्रकार आहेत, परंतु Java भाषेच्या विपरीत, त्यापैकी बरेच नाहीत कारण सर्व प्रसंगांसाठी डेटा प्रकार आहेत. डेटाबेस डेटाच्या आकारावर खूप अवलंबून असतात, म्हणून बरेच डेटा प्रकार एकमेकांपासून फक्त लांबीमध्ये भिन्न असतात.
एकूण, डेटा प्रकार 5 गटांमध्ये विभागले जाऊ शकतात:
- संख्यात्मक प्रकार
- स्ट्रिंग प्रकार
- तारखा आणि वेळा संग्रहित करण्याचे प्रकार
- ऑब्जेक्ट्स: सहसा बाइट्सचा संग्रह म्हणून प्रस्तुत केले जाते
- वाहतूक : JSON आणि XML
सहसा भिन्न DBMS चे स्वतःचे डेटा प्रकार असतात. प्रत्येक DBMS चे स्वतःचे स्पेशलायझेशन असते, त्यामुळे नवीन डेटा प्रकार जोडणे ही अतिशय सामान्य गोष्ट आहे.
आणखी एक गोष्ट अशी आहे की फक्त नवीन डेटा प्रकार जोडणे पुरेसे नाही, आपल्याला त्यासह कार्य करतील अशी कार्ये जोडणे आवश्यक आहे, तसेच हे कार्य सोयीस्कर आणि जलद बनवावे लागेल.
जर तुम्ही कोणत्याही औद्योगिक (एंटरप्राइझ) DBMS वर काम करत असाल तर बहुधा तुम्हाला त्याचा डेटा प्रकार आणि त्याची कार्ये हाताळावी लागतील. त्यासाठी २-५ चांगली पुस्तके वाचावी लागतील.
एसक्यूएल सह आमच्या ओळखीचा भाग म्हणून, आम्ही डेटा प्रकारांच्या तीन मुख्य गटांचा विचार करू:
- संख्या
- तार
- तारखा
SQL मध्ये संख्यात्मक प्रकार
SQL मध्ये, संख्यात्मक प्रकार तीन गटांमध्ये विभागले गेले आहेत:
- पूर्णांक प्रकार
- स्थिर बिंदू संख्या (दशांश स्थानांची निश्चित संख्या)
- फ्लोटिंग पॉइंट क्रमांक
चला पूर्णांकांसह प्रारंभ करूया . त्यापैकी फक्त 5 आहेत आणि त्यांचे वर्णन एका टेबलमध्ये केले जाऊ शकते:
# | नाव टाइप करा | बाइट्स मध्ये लांबी | जावा मधील अॅनालॉग | किमान मूल्य | कमाल मूल्य |
---|---|---|---|---|---|
१ | TINYINT | १ | बाइट | -128 | 127 |
2 | SMALINT | 2 | लहान | -३२.७६८ | ३२.७६७ |
3 | मध्यम | 3 | -8,388,608 | ८,३८८,६०७ | |
4 | INT | 4 | int | -2,147,483,648 | 2,147,483,647 |
५ | BIGINT | 8 | लांब | -2 63 | 2 63-1 |
डेटा प्रकार Java डेटा प्रकारांसारखेच आहेत, परंतु तीन बाइट्स लांबीचा पूर्णांक प्रकार देखील आहे. हे आकार वाचवण्यासाठी केले जाते.
पुढे फ्लोटिंग पॉइंट प्रकार येतात , जसे Java मध्ये, त्यापैकी फक्त दोन आहेत:
# | नाव टाइप करा | बाइट्स मध्ये लांबी | जावा मधील अॅनालॉग | किमान मूल्य | कमाल मूल्य |
---|---|---|---|---|---|
१ | फ्लोट | 4 | फ्लोट | -3.40E+38 | +1.18E+38 |
2 | दुहेरी | 8 | दुप्पट | -1.79E+308 | +1.79E+308 |
पुन्हा, नवीन काहीही नाही. सर्व काही Java प्रमाणेच आहे. तथापि, Java च्या विपरीत, SQL मध्ये आणखी एक विशेष प्रकार आहे, स्थिर-बिंदू वास्तविक संख्या. त्याला DECIMAL म्हणतात.
सामान्यत: हा प्रकार पैसे साठवण्यासाठी वापरला जातो. जेव्हा या प्रकाराचे नाव लिहिले जाते, तेव्हा त्या नंतर सहसा दशांश बिंदूच्या आधी आणि नंतर किती दशांश स्थाने आहेत हे सूचित केले जाते. सामान्य स्वरूप असे दिसते:
DECIMAL(total_characters, after_comma)
आणि एक लहान उदाहरण:
salary DECIMAL(5,2)
पगाराच्या स्तंभात पूर्णांक (जास्तीत जास्त 3 दशांश स्थाने) आणि अपूर्णांक भाग - 2 दशांश स्थाने असू शकतात या वस्तुस्थितीचे आम्ही अशा प्रकारे वर्णन केले आहे.
DECIMAL प्रकार समर्थित वर्णांची कमाल संख्या 65 आहे.
SQL मध्ये स्ट्रिंग प्रकार
डेटाबेसमधील पंक्ती दोन स्वरूपात संग्रहित केल्या जाऊ शकतात:
- निश्चित लांबीचे तार
- व्हेरिएबल लांबीसह स्ट्रिंग्स
निश्चित-लांबीच्या स्ट्रिंग्स CHAR म्हणून निर्दिष्ट केल्या आहेत :
CHAR(length)
निश्चित लांबीचा अर्थ असा आहे की या स्तंभाच्या सर्व मूल्यांमध्ये काटेकोरपणे निश्चित वर्णांची संख्या असेल.
निश्चित लांबीच्या स्ट्रिंगचे उदाहरण:
country_code CHAR(2)
व्हेरिएबल लांबी स्ट्रिंग VARCHAR प्रकाराद्वारे निर्दिष्ट केल्या आहेत :
VARCHAR(max_length)
व्हेरिएबल लांबीचा अर्थ असा आहे की या स्तंभाच्या सर्व मूल्यांमध्ये कोणत्याही लांबीचा मजकूर असेल, परंतु कमाल लांबीपेक्षा जास्त नसेल.
व्हेरिएबल लांबी स्ट्रिंग उदाहरण:
phone VARCHAR(12)
निश्चित लांबीच्या तारांचा खूप मोठा फायदा आहे. जर क्लायंटने SQL सर्व्हरला टेबलमधील 1,000,000 वी पंक्ती परत करण्यास सांगितले आणि टेबलमधील पंक्ती निश्चित लांबीच्या असतील तर, पंक्तीची लांबी जाणून घेतल्यास, आपण इच्छित असलेल्या बाइट्सची सहज गणना करू शकता. पंक्ती
ओळींच्या व्हेरिएबल लांबीच्या बाबतीत, टेबलमध्ये इच्छित पंक्ती पटकन शोधणे शक्य होणार नाही. ArrayList आणि LinkedList मधील प्रवेशाची गती लक्षात ठेवा, परिस्थिती येथे अंदाजे समान आहे.
डेटा प्रकारावर अवलंबून, टेबलमध्ये वेगवेगळ्या लांबीच्या स्ट्रिंग्स कशा साठवल्या जातील याची तुलना करूया.
ओळ | CHAR(4) | संग्रहित करण्यासाठी बाइट | वरचार(४) | संग्रहित करण्यासाठी बाइट | |
---|---|---|---|---|---|
'' | ' | 4 | '' | १ | |
'अब' | 'अब' | 4 | 'अब' | 3 | |
'अ ब क ड' | 'अ ब क ड' | 4 | 'अ ब क ड' | ५ | |
'abcdefgh' | 'अ ब क ड' | 4 | 'अ ब क ड' | ५ |
नोंद. VARCHAR प्रकारासाठी समान लांबीसाठी आणखी एक बाइट आवश्यक आहे, कारण त्यास स्ट्रिंगची लांबी अतिरिक्तपणे संग्रहित करावी लागेल.
SQL मध्ये तात्पुरते प्रकार
SQL मध्ये तारखा आणि वेळा संग्रहित करण्यासाठी विशेष प्रकार देखील आहेत. एकूण पाच प्रकार आहेत:
# | नाव टाइप करा | Java DateTime API मधील अॅनालॉग | उदाहरण | किमान मूल्य | कमाल मूल्य |
---|---|---|---|---|---|
१ | DATE | LocalDate | '२०२२-०६-३०' | '1000-01-01' | '9999-12-31' |
2 | TIME | स्थानिक वेळ | 'hh:mm:ss[.fraction]' | '-838:59:59.000000' | '838:59:59.000000' |
3 | तारीख वेळ | स्थानिक तारीख वेळ | '1000-01-01 00:00:00.000000' | '9999-12-31 23:59:59.999999' | |
4 | टाइमस्टॅम्प | तारीख | '1970-01-01 00:00:01.000000' | '२०३८-०१-१९ ०३:१४:०७.९९९९९९' | |
५ | वर्ष | 1901 | 2155 |
क्वेरीमधील सर्व डेटा स्ट्रिंग म्हणून लिहिला जातो - एकल कोट्समध्ये. एंट्री फॉरमॅट सर्वात मोठ्या ते सर्वात लहान पर्यंत जातो:
- वर्ष
- महिना
- दिवस
- तास
- मिनिट
- दुसरा
- एका सेकंदाचे अपूर्णांक
DATE, TIME आणि DATETIME प्रकार हे Java DateTme API मधील प्रकारांचे पारंपारिकपणे अॅनालॉग मानले जाऊ शकतात: LocalDate, LocalTime, LocalDateTime. तर्कशास्त्र सारखेच आहे.
TIMESTAMP प्रकार 1970 च्या सुरुवातीपासून (एक UNIX ऑपरेटिंग सिस्टम मानक) डेटा मिलीसेकंदमध्ये संग्रहित करतो. या फॉर्ममध्ये ते जावा भाषेतील तारीख प्रकारानुसार संग्रहित केले जातात.
आणि शेवटी, YEAR प्रकार आहे, जो 1 बाइट लांब आहे आणि 1 ते 255 पर्यंत मूल्ये संग्रहित करतो. म्हणून, त्याच्यासाठी उपलब्ध वर्षांची श्रेणी 1901-2155 आहे. 1900 हे वर्ष या प्रकाराद्वारे संग्रहित केले जाऊ शकत नाही, कारण 0 मूल्य NULL मूल्य एन्कोड करण्यासाठी वापरले जाते.
एसक्यूएल मध्ये वस्तू साठवणे
मोठ्या लांबीच्या वस्तू किंवा मजकूर संग्रहित करण्यासाठी विशेष प्रकार आहेत. आम्ही त्यांच्याबद्दल तपशीलवार विचार करणार नाही, परंतु तरीही मी त्यांची यादी करेन:
# | नाव टाइप करा | स्पष्टीकरण |
---|---|---|
१ | TEXT | लांबलचक मजकूर साठवण्यासाठी वापरला जातो. या फील्डवर तुलना आणि क्रमवारी लावताना, फक्त पहिले 100 वर्ण वापरले जातात. |
2 | BLOB | नावाचा अर्थ बाइट लार्ज ऑब्जेक्ट आहे. फक्त बाइट्सचा संग्रह म्हणून संग्रहित. उदाहरणार्थ, डेटाबेसमध्ये चित्रे संग्रहित करण्यासाठी वापरली जाऊ शकते. |
3 | CLOB | नावाचा अर्थ Char Large Object आहे. लांबलचक मजकूर साठवण्यासाठी वापरला जातो. |
4 | ENUM | तुम्हाला मूल्यांचा निश्चित संच सेट करण्याची आणि त्यापैकी एक मूल्य म्हणून संग्रहित करण्याची अनुमती देते. |
५ | सेट | तुम्हाला मूल्यांचा एक निश्चित संच सेट करण्याची आणि त्यातील कोणताही उपसंच मूल्य म्हणून संग्रहित करण्याची अनुमती देते. ते सहसा बायनरी मास्क म्हणून साठवतात. |
सैद्धांतिकदृष्ट्या, तुम्ही कोणत्याही Java ऑब्जेक्टला बाइट्सच्या संचाच्या रूपात अनुक्रमित करू शकता आणि डेटाबेसमध्ये BLOB म्हणून संग्रहित करू शकता. ऑब्जेक्ट जतन करणे ही समस्या नाही. त्याच्यासोबत पुढे काम कसे करायचे?
समजा की एक टेबल एक दशलक्ष वस्तू अनुक्रमित स्वरूपात संग्रहित करते - तुम्ही त्याद्वारे कसे शोधाल? डीबीएमएस केवळ विशिष्ट प्रकारच्या डेटाचे समर्थन करते जेव्हा ते त्याच्यासह कार्य करण्यासाठी कार्यांचा विस्तृत संच प्रदान करते.