खोज…
वाक्य - विन्यास
चुनें व्यू_नाम के रूप में SELECT column_name (s) तालिका से_नाम जहां है हालत; /// सरल बनाएँ सिंटैक्स देखें
बनाएँ [या प्रतिक्रिया] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = {उपयोगकर्ता | CURRENT_USER}] [SQL सुरक्षा {DEFINER | INVOKER}] View_name [(column_list)] AS_ के चयन के साथ [के साथ [CASCADED] | स्थानीय] चेक विकल्प]; /// पूर्ण बनाएँ सिंटैक्स देखें
DROP VIEW [IF EXISTS] [db_name।] View_name; /// ड्रॉप सिंटैक्स देखें
पैरामीटर
पैरामीटर | विवरण |
---|---|
VIEW_NAME | देखने का नाम |
चयन कथन | एसक्यूएल बयान विचारों में पैक किया जाना है। यह एक या अधिक तालिकाओं से डेटा लाने के लिए एक सेलेक्ट स्टेटमेंट हो सकता है। |
टिप्पणियों
दृश्य वर्चुअल टेबल हैं और इसमें वह डेटा नहीं है जो वापस लौटाया गया है। वे आपको बार-बार जटिल प्रश्न लिखने से बचा सकते हैं।
- दृश्य बनाने से पहले इसके विनिर्देश पूरी तरह से एक
SELECT
स्टेटमेंट के होते हैं।SELECT
स्टेटमेंट में FROM क्लॉज में सब-क्वेरी नहीं हो सकती है। - एक बार देखने के बाद इसे बड़े पैमाने पर एक मेज की तरह इस्तेमाल किया जाता है और इसे टेबल की तरह ही
SELECT
एड किया जा सकता है।
जब आप अपनी तालिका के कुछ स्तंभों को अन्य उपयोगकर्ता से प्रतिबंधित करना चाहते हैं, तो आपको विचार बनाने होंगे।
- उदाहरण के लिए: आपके संगठन में, आप चाहते हैं कि आपके प्रबंधक कुछ जानकारी को "सेल्स" नाम की तालिका से देखें, लेकिन आप यह नहीं चाहते हैं कि आपके सॉफ्टवेयर इंजीनियर टेबल के सभी क्षेत्रों को देख सकें- "बिक्री"। यहां, आप अपने प्रबंधकों और अपने सॉफ़्टवेयर इंजीनियरों के लिए दो अलग-अलग विचार बना सकते हैं।
प्रदर्शन । VIEWs
चीनी हैं। हालाँकि, प्रदर्शन, तह के दृश्य के समतुल्य क्वेरी से अधिक खराब नहीं हो सकता है। ऑप्टिमाइज़र आपके लिए यह "गुना" करने का प्रयास करता है, लेकिन हमेशा सफल नहीं होता है। ऑप्टिमाइज़र में MySQL 5.7.6 कुछ और एन्हांसमेंट प्रदान करता है। लेकिन, परवाह किए बिना, VIEW
का उपयोग करने से तेज क्वेरी उत्पन्न नहीं होगी।
एक दृश्य बनाएँ
विशेषाधिकार
क्रिएट व्यू स्टेटमेंट में व्यू के लिए क्रिएट व्यू विशेषाधिकार की आवश्यकता होती है, और सेलेक्ट स्टेटमेंट द्वारा चुने गए प्रत्येक कॉलम के लिए कुछ विशेषाधिकार। सेलेक्ट स्टेटमेंट में कहीं और इस्तेमाल किए गए कॉलम के लिए, आपके पास सेलेक्ट विशेषाधिकार होना चाहिए। यदि OR REPLACE खंड मौजूद है, तो आपके पास दृश्य के लिए DROP विशेषाधिकार भी होना चाहिए। क्रिएट व्यू को DEFINER मान के आधार पर सुपर विशेषाधिकार की आवश्यकता हो सकती है, जैसा कि इस खंड में बाद में वर्णित है।
जब कोई दृश्य संदर्भित होता है, तो विशेषाधिकार जाँच होती है।
एक दृश्य एक डेटाबेस का है। डिफ़ॉल्ट रूप से, डिफ़ॉल्ट डेटाबेस में एक नया दृश्य बनाया जाता है। किसी दिए गए डेटाबेस में स्पष्ट रूप से दृश्य बनाने के लिए, पूरी तरह से योग्य नाम का उपयोग करें
उदाहरण के लिए:
db_name.view_name
mysql> CREATE VIEW test.v AS SELECT * FROM t;
नोट - एक डेटाबेस के भीतर, बेस टेबल और व्यूज़ एक ही नेमस्पेस साझा करते हैं, इसलिए बेस टेबल और एक व्यू में एक ही नाम नहीं हो सकता है।
एक दृश्य:
- कई प्रकार के सेलेक्ट स्टेटमेंट बनाए जा सकते हैं
- बेस टेबल या अन्य विचारों का संदर्भ लें
- जॉइन, यूनिअन और सबक्वेरीज़ का उपयोग करें
- चयन को किसी भी तालिकाओं को संदर्भित करने की आवश्यकता नहीं है
एक और उदाहरण
निम्न उदाहरण एक दृश्य को परिभाषित करता है जो किसी अन्य तालिका से दो स्तंभों के साथ-साथ उन स्तंभों से गणना की गई अभिव्यक्ति का चयन करता है:
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
प्रतिबंध
- MySQL 5.7.7 से पहले, SELECT स्टेटमेंट में FROM क्लॉज में एक सबक्वेरी शामिल नहीं हो सकती है।
- चयन कथन सिस्टम चर या उपयोगकर्ता-परिभाषित चर का संदर्भ नहीं दे सकता है।
- एक संग्रहीत प्रोग्राम के भीतर, SELECT स्टेटमेंट प्रोग्राम पैरामीटर या स्थानीय चर का संदर्भ नहीं दे सकता है।
- SELECT स्टेटमेंट तैयार स्टेटमेंट पैरामीटर को संदर्भित नहीं कर सकता है।
- परिभाषा में निर्दिष्ट कोई तालिका या दृश्य मौजूद होना चाहिए। दृश्य बनाए जाने के बाद, तालिका या दृश्य को गिराना संभव है
परिभाषा को संदर्भित करता है। इस स्थिति में, दृश्य के उपयोग में त्रुटि होती है। इस तरह की समस्याओं के लिए एक दृश्य परिभाषा की जाँच करने के लिए, CHECK TABLE स्टेटमेंट का उपयोग करें। - परिभाषा TEMPORARY तालिका को संदर्भित नहीं कर सकती, और आप नहीं कर सकते
एक अस्थायी दृश्य बनाएँ। - आप एक ट्रिगर को एक दृश्य के साथ जोड़ नहीं सकते हैं।
- सेलेक्ट स्टेटमेंट में कॉलम नामों के लिए एलियास की जाँच 64 कॉलम की अधिकतम कॉलम लंबाई (अधिकतम उपनाम नहीं) के खिलाफ की जाती है
256 अक्षरों की लंबाई)। - एक
VIEW
, समानSELECT
साथ-साथ अनुकूलन भी कर सकता है या नहीं भी कर सकता है। यह किसी भी बेहतर अनुकूलन की संभावना नहीं है।
दो तालिकाओं से एक दृश्य
एक दृश्य सबसे उपयोगी होता है जब इसका उपयोग एक से अधिक टेबल से डेटा में खींचने के लिए किया जा सकता है।
CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a
LEFT OUTER JOIN other_table b
ON a.id = b.id
Mysql में विचार नहीं हैं। यदि आप अब सरल क्वेरी का SELECT * FROM myview
, mysql वास्तव में दृश्य के पीछे बाईं ओर प्रदर्शन करेंगे।
एक बार बनाया गया दृश्य अन्य विचारों या तालिकाओं में शामिल हो सकता है
एक दृश्य के माध्यम से एक तालिका अद्यतन करना
एक VIEW
तालिका की तरह काम करता है। हालाँकि आप किसी तालिका को UPDATE
कर सकते हैं, आप उस तालिका में एक दृश्य को अपडेट कर सकते हैं या नहीं कर सकते हैं। सामान्य तौर पर, यदि दृश्य में SELECT
एक टेंपरेचर टेबल की आवश्यकता के लिए पर्याप्त जटिल है, तो UPDATE
की अनुमति नहीं है।
GROUP BY
, UNION
, HAVING
, DISTINCT
, और कुछ उपश्रेणियों जैसी चीजें दृश्य को अद्यतन होने से रोकती हैं। संदर्भ मैनुअल में विवरण।
द्रोपदी एक दृश्य
- वर्तमान डेटाबेस में एक दृश्य बनाएं और छोड़ें।
CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;
- एक अलग डेटाबेस में तालिका को संदर्भित करते हुए एक दृश्य बनाएं और छोड़ें।
CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;