SQL हमारा सब कुछ है

जैसा कि आप शायद पहले ही अनुमान लगा चुके हैं, SQL सर्वर को सभी आदेश SQL प्रश्नों के माध्यम से दिए जा सकते हैं। सब कुछ।

इन टीमों को आधिकारिक तौर पर 4 समूहों में बांटा गया है:

  • डेटा डेफिनिशन स्टेटमेंट (डेटा डेफिनिशन लैंग्वेज, डीडीएल ):

    • CREATE डेटाबेस ऑब्जेक्ट बनाता है (डेटाबेस स्वयं, टेबल, व्यू, उपयोगकर्ता, और इसी तरह)
    • ALTER किसी वस्तु को बदलता है
    • DROP किसी वस्तु को हटा देता है
  • डेटा हेरफेर ऑपरेटर (डेटा मैनीपुलेशन लैंग्वेज, डीएमएल ):

    • SELECT डेटा का चयन करता है जो दी गई शर्तों को पूरा करता है
    • INSERT नया डेटा जोड़ता है
    • अद्यतन मौजूदा डेटा को बदलता है
    • DELETE डेटा को हटा देता है
  • डेटा एक्सेस डेफिनिशन ऑपरेटर्स (डेटा कंट्रोल लैंग्वेज, डीसीएल ):

    • GRANT एक उपयोगकर्ता (समूह) को किसी वस्तु पर कुछ संचालन करने की अनुमति देता है
    • REVOKE पहले जारी की गई अनुमतियों को निरस्त करता है
    • DENY एक प्रतिबंध लगाता है जो एक परमिट पर पूर्वता लेता है
  • लेनदेन नियंत्रण भाषा ( टीसीएल ) बयान :

    • COMMIT एक लेनदेन लागू करता है
    • रोलबैक वर्तमान लेनदेन के संदर्भ में किए गए सभी परिवर्तनों को वापस ले लेता है
    • SAVEPOINT एक लेन-देन को छोटे वर्गों में विभाजित करता है

और पहले दो स्तरों में, हमने केवल चयन कथन की किस्मों का अध्ययन किया। कल्पना कीजिए कि भविष्य में कितनी दिलचस्प चीजें हमारा इंतजार कर रही हैं।

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

प्रोजेक्ट पर सिस्टम व्यवस्थापक सबसे अधिक संभावना सभी डेटाबेस बनाएगा, लेकिन आपको निश्चित रूप से कई बार डेटा से स्वयं चयन करना होगा।

इसके अलावा, कभी-कभी आपका कोड डेटाबेस में सभी डेटा नहीं लिखेगा या गलत तरीके से लिखेगा, इसलिए आपको अक्सर इसमें पेन के साथ चढ़ना होगा और देखें कि वास्तव में वहां क्या संग्रहीत है।

आइए उन बातों पर दोबारा गौर करें जिन्हें हमने पिछले व्याख्यानों में छुआ था।

डेटाबेस में स्कीमा बनाना

DBMS में एक नया स्कीमा बनाने के लिए, आपको कमांड चलाने की आवश्यकता है:

CREATE SCHEMA Name;

यह सबसे आसान विकल्प है। साथ ही, एक नया स्कीमा बनाते समय, आप डेटा एन्कोडिंग प्रारूप और अन्य पैरामीटर निर्दिष्ट कर सकते हैं।

यदि आप स्कीमा को हटाना चाहते हैं, लेकिन आप सुनिश्चित नहीं हैं कि यह मौजूद है, तो आपको कमांड चलाने की आवश्यकता है:

DROP SCHEMA IF EXIST Name;

आप अक्सर इन आदेशों को विभिन्न डेटाबेस के बैकअप वाली फाइलों में देखेंगे, इसलिए मैं उन्हें यहां लाता हूं।

वर्तमान योजना का चयन

यदि आपके DBMS में बहुत सारे स्कीमा हैं, तो यह आसानी से हो सकता है कि अलग-अलग स्कीमा में समान टेबल हों। भ्रम से बचने के लिए आप दो काम कर सकते हैं:

  • तालिका के नाम से पहले हमेशा स्कीमा का नाम रखें
  • डिफ़ॉल्ट स्कीमा निर्दिष्ट करें

आइए एक प्रश्न लिखें जो उपयोगकर्ता तालिका से डेटा का चयन करेगा , जो परीक्षण स्कीमा में है । यह कुछ ऐसा दिखाई देगा:

SELECT * FROM test.user;

यदि आपको एक क्वेरी में विभिन्न स्कीमाओं से कई तालिकाओं में शामिल होने (JOIN) करने की आवश्यकता है, तो यह केवल अपरिहार्य है।

वैसे, जावा भाषा में हम अक्सर कुछ ऐसा ही करते हैं: यदि कोड में हमें विभिन्न पैकेजों से समान नाम वाली कक्षाओं का उपयोग करने की आवश्यकता होती है, तो हम वर्ग के नाम से पहले पैकेज का नाम जोड़ते हैं।

दूसरा तरीका डिफ़ॉल्ट स्कीमा निर्दिष्ट करना है । यदि क्वेरी तालिका नाम निर्दिष्ट करती है लेकिन कोई स्कीमा नहीं है, तो डिफ़ॉल्ट स्कीमा का उपयोग किया जाता है। ऐसा करने के लिए, USE स्टेटमेंट का उपयोग करें :

USE name - schemes;

आइए USE स्टेटमेंट का उपयोग करके पिछली क्वेरी को फिर से लिखें:

USE test;
SELECT * FROM user;

एक दृश्य बनाना

वास्तविक डेटा वाली तालिकाओं के अलावा, SQL आपको वर्चुअल तालिकाओं जैसी चीज़ों को संग्रहीत करने की अनुमति देता है, जहाँ वास्तविक तालिकाओं से डेटा खींचा जाता है। ऐसी वर्चुअल टेबल को व्यू कहा जाता है।

ऐसी तालिका वास्तविक डेटा को संग्रहीत नहीं कर सकती है, और हर बार जब इसे एक्सेस किया जाता है, तो यह वास्तविक तालिकाओं से डेटा खींचती है। ऐसे दृश्य की सामग्री SQL क्वेरी का उपयोग करके निर्दिष्ट की जाती है।

आप किसी भी चयन क्वेरी से एक आदेश के साथ एक दृश्य बना सकते हैं जैसे:

CREATE VIEW Name AS
SELECT-request;
आइए एक क्वेरी लिखते हैं जो कर्मचारी तालिका के आधार पर एक public_employee वर्चुअल टेबल बनाएगी, जहाँ कर्मचारी के वेतन की जानकारी छिपी होगी:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

उपरोक्त उदाहरण में, हमारी तालिका (देखें) public_employee में केवल कर्मचारी आईडी और उनके नाम होंगे, लेकिन उनके वेतन के बारे में जानकारी नहीं होगी। आप ऐसे दृश्यों का उपयोग उसी स्थान पर वास्तविक तालिकाओं के रूप में कर सकते हैं।

व्यूज की जरूरत क्यों है? उनके कई फायदे हैं:

सूचना तक पहुंच का लचीला नियंत्रण । आप कुछ उपयोगकर्ताओं को केवल देखने का एक्सेस दे सकते हैं, लेकिन टेबल का एक्सेस नहीं दे सकते. और व्यू में टेबल्स से सिर्फ पब्लिक इंफॉर्मेशन ही निकालें। इसके अलावा, यदि भविष्य में महत्वपूर्ण जानकारी वाले नए कॉलम तालिकाओं में जोड़े जाते हैं, तो यह गलती से दृश्य में नहीं आएगा।

डेटा असामान्यकरण । भंडारण की सुविधा के लिए, डेटा को अक्सर सैकड़ों और हजारों तालिकाओं में विभाजित किया जाता है, लेकिन एक सामान्य व्यक्ति के लिए ऐसे डेटा के साथ काम करना बहुत सुविधाजनक नहीं होता है - आपको बहुत जटिल प्रश्न लिखने होंगे। व्यू के साथ, आप वर्चुअल टेबल बना सकते हैं जो एक ही टेबल में दर्जनों अलग-अलग टेबल से डेटा प्रदर्शित करते हैं।

बहुरूपता और एनकैप्सुलेशन । आप अपने डेटाबेस की संरचनाओं को बदल सकते हैं। उसी समय, आपके विचारों के साथ काम करने वाले प्रोग्राम के उपयोगकर्ता अनुमान नहीं लगा पाएंगे कि कुछ बदल गया है। और उन प्रोग्रामों के कोड को फिर से लिखने की आवश्यकता नहीं होगी जिनकी व्यू तक पहुंच है। आपको केवल SQL स्क्रिप्ट को ट्वीक करने की आवश्यकता होगी जो कि VIEW से संबंधित है।

केवल पढ़ें । दृश्य केवल एक चयन क्वेरी के साथ सेट किया जा सकता है, इसलिए दृश्य के साथ काम करने से डेटा को किसी भी तरह से वास्तविक तालिकाओं में नहीं बदला जा सकता है। वैसे, यह क्वेरी कैशिंग के पक्ष में एक और प्लस है। लेकिन उस पर और अधिक अगली बार।