Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> MySql

जहां MySQL के विचार असंगत हो सकते हैं और हम उनकी निरंतरता कैसे सुनिश्चित कर सकते हैं?


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

मूल रूप से, WITH CHECK OPTION क्लॉज हमें उन पंक्तियों को अपडेट करने या सम्मिलित करने से रोकता है जो एक दृश्य के माध्यम से दिखाई नहीं देती हैं। सरल अर्थ में हम कह सकते हैं कि चेक विकल्प क्लॉज के साथ उपयोग करने के बाद, MySQL यह सुनिश्चित करता है कि दृश्य की परिभाषा से सम्मिलित या अद्यतन ऑपरेशन की पुष्टि हो। WITH CHECK OPTION क्लॉज का सिंटैक्स निम्नलिखित है -

सिंटैक्स

चेक विकल्प के साथ चयन_कथन के रूप में दृश्य_नाम बनाएं या बदलें;

उदाहरण

उपरोक्त अवधारणा को स्पष्ट करने के लिए, हम तालिका 'Student_info' से निम्नलिखित डेटा का उपयोग कर रहे हैं -

mysql> student_info से * चुनें; ---+| आईडी | नाम | पता | विषय |+----------+---------+-----------+---------------+| 101 | यशपाल | अमृतसर | इतिहास || 105 | गौरव | चंडीगढ़ | साहित्य || 125 | रमन | शिमला | कंप्यूटर || 130 | राम | झांसी | कंप्यूटर |+----------+---------+---------------+---------------+सेट में 4 पंक्तियाँ (0.08 सेकंड)

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

mysql> छात्र जानकारी से आईडी, नाम, पता, विषय के रूप में देखें जानकारी बनाएं या बदलें जहां विषय ='कंप्यूटर'; क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.46 सेकंड) mysql> जानकारी से * चुनें; + ---- ---+----------+------------+----------+| आईडी | नाम | पता | विषय |+------+-------+-----------+-----------+| 125 | रमन | शिमला | कंप्यूटर || 130 | राम | झांसी | कंप्यूटर |+------+-------+-----------+-----------+2 पंक्तियों में सेट (0.00 सेकंड) 

चूंकि, हमने चेक विकल्प के साथ उपयोग नहीं किया है, इसलिए हम 'जानकारी' में एक नई पंक्ति सम्मिलित/अपडेट कर सकते हैं, भले ही वह इसकी परिभाषा से मेल न खाए। इसे निम्नलिखित प्रश्न और उसके परिणाम में दर्शाया गया है -

mysql> INSERT INTO Info(Id, Name, Address,विषय) मान (132, 'श्याम', 'चंडीगढ़', 'अर्थशास्त्र'); क्वेरी ठीक है, 1 पंक्ति प्रभावित (0.37 सेकंड) mysql> student_info से * चुनें;+----------+------------+---------------+---------------+| आईडी | नाम | पता | विषय |+----------+---------+-----------+---------------+| 101 | यशपाल | अमृतसर | इतिहास || 105 | गौरव | चंडीगढ़ | साहित्य || 125 | रमन | शिमला | कंप्यूटर || 130 | राम | झांसी | कंप्यूटर || 132 | श्याम | चंडीगढ़ | अर्थशास्त्र |+----------+-----------+---------------+---------------+5 पंक्तियाँ सेट में (0.00 सेकंड)mysql> जानकारी से * चुनें; आईडी | नाम | पता | विषय |+------+-------+-----------+-----------+| 125 | रमन | शिमला | कंप्यूटर || 130 | राम | झांसी | कंप्यूटर |+----------+-------+-----------+-----------+2 पंक्तियों में सेट (0.00 सेकंड) 

उपरोक्त परिणाम सेट से पता चलता है कि नई पंक्ति 'जानकारी' की परिभाषा से मेल नहीं खाती है इसलिए यह दृश्य में दिखाई नहीं देता है। अब, निम्नलिखित प्रश्न में, हम वही दृश्य 'जानकारी' बना रहे हैं

'विथ चेक ऑप्शन' का उपयोग करके -

mysql> स्टूडेंट_इन्फो से चुनें आईडी, नाम, पता, विषय के रूप में देखें जानकारी बनाएं या बदलें जहां विषय ='कंप्यूटर' चेक विकल्प के साथ; क्वेरी ठीक है, 0 पंक्तियां प्रभावित (0.06 सेकेंड) 

अब, यदि हम एक पंक्ति सम्मिलित करने का प्रयास करेंगे जो 'जानकारी' दृश्य की परिभाषा से मेल खाती है, तो MySQL हमें ऐसा करने की अनुमति देता है। इसे निम्न क्वेरी और उसके परिणाम से साफ़ किया जा सकता है।

mysql> INSERT INTO Info(Id, Name, Address,विषय) मान (133, 'मोहन', 'दिल्ली', 'कंप्यूटर'); क्वेरी ठीक है, 1 पंक्ति प्रभावित (0.07 सेकंड) mysql> जानकारी से * चुनें;+----------+----------+------------+----------+| आईडी | नाम | पता | विषय |+------+-------+-----------+-----------+| 125 | रमन | शिमला | कंप्यूटर || 130 | राम | झांसी | कंप्यूटर || 133 | मोहन | दिल्ली | कंप्यूटर |+----------+-------+-----------+-----------+3 पंक्तियों में सेट (0.00 सेकंड) 

लेकिन मान लीजिए कि यदि हम उस पंक्ति को सम्मिलित करने का प्रयास करेंगे जो दृश्य 'जानकारी' की परिभाषा से मेल नहीं खाती है, तो MySQL हमें ऐसा करने की अनुमति नहीं देगा और त्रुटि फेंकता है -

mysql> INSERT INTO Info(Id, Name, Address,विषय) मान (134, 'चरणजीत', 'अमृतसर', 'जियोफिजिक्स');ERROR 1369 (HY000):CHECK OPTION विफल

  1. MySQL और उनकी गिनती में अलग-अलग मान कैसे लौटाएं?

    केवल विशिष्ट मान वापस करने के लिए, ग्रुप बाय क्लॉज का उपयोग करें। आइए पहले एक टेबल बनाएं - टेबल बनाएं DemoTable754 (ProductPrice int);क्वेरी ओके, 0 पंक्तियाँ प्रभावित (0.48 सेकंड) इंसर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें - DemoTable754 मान (900) में डालें; क्वेरी ठीक है, 1 पंक्ति प्

  1. मैं MySQL में कैस्केड कैसे देख सकता हूं?

    कैस्केड देखने के लिए, MySQL में SHOW CREATE TABLE का उपयोग करें। आइए पहले एक टेबल बनाएं - );क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.93 सेकंड) आइए अब MySQL में कैस्केड देखें - तालिका बनाएं DemoTable1378 दिखाएं; यह निम्नलिखित आउटपुट देगा - +----------------------------+----------------------------

  1. MySQL व्यू का उपयोग WHERE क्लॉज के साथ कैसे करें?

    MySQL व्यू के लिए WHERE क्लॉज के साथ, सिंटैक्स इस प्रकार है - अपने व्यूनाम से * चुनें जहां आपका कॉलमनाम=आपका वैल्यू; आइए पहले एक − . बनाएं );क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (1.26 सेकंड) इंसर्ट का उपयोग करके टेबल में कुछ रिकॉर्ड डालें - DemoTable1432(StudentName,StudentBranchName) मानों में