अद्यतन योग्य व्यू के मामले में, यह काफी संभव है कि हम उस डेटा को अपडेट करें जो व्यू के माध्यम से दिखाई नहीं देता क्योंकि हम एक व्यू बनाते हैं जो केवल तालिका के आंशिक डेटा को प्रकट करता है। ऐसे अपडेट व्यू को असंगत बनाते हैं। हम WITH CHECK OPTION का उपयोग करके व्यू की स्थिरता सुनिश्चित कर सकते हैं जब व्यू बनाते या संशोधित करते समय। यद्यपि WITH CHECK OPTION क्लॉज CREATE VIEW स्टेटमेंट का एक वैकल्पिक भाग है लेकिन यह व्यू को सुसंगत बनाने के लिए बहुत उपयोगी है।
मूल रूप से, WITH CHECK OPTION क्लॉज हमें उन पंक्तियों को अपडेट या सम्मिलित करने से रोकता है जो व्यू के माध्यम से दिखाई नहीं देतीं। सरल अर्थ में हम कह सकते हैं कि WITH CHECK OPTION क्लॉज का उपयोग करने के बाद, MySQL यह सुनिश्चित करता है कि सम्मिलन या अद्यतन ऑपरेशन व्यू की परिभाषा द्वारा पुष्टि की जाती है। WITH CHECK OPTION क्लॉज का वाक्यविन्यास निम्न है:
वाक्यविन्यास
CREATE OR REPLACE VIEW view_name AS Select_statement WITH CHECK OPTION;
उदाहरण
उपरोक्त अवधारणा को समझाने के लिए, हम 'Student_info' तालिका से निम्न डेटा का उपयोग कर रहे हैं:
mysql> Select * from student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Chandigarh | Literature | | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | +------+---------+------------+------------+ 4 rows in set (0.08 sec)
अब, निम्न क्वेरी की सहायता से, हम 'Info' नामक व्यू बनाएंगे। यहाँ हम WITH CHECK OPTION का उपयोग नहीं कर रहे हैं।
mysql> Create OR Replace VIEW Info AS Select Id, Name, Address, Subject from student_info WHERE Subject = 'Computers'; Query OK, 0 rows affected (0.46 sec) mysql> Select * from info; +------+-------+---------+-----------+ | Id | Name | Address | Subject | +------+-------+---------+-----------+ | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | +------+-------+---------+-----------+ 2 rows in set (0.00 sec)
चूंकि हमने WITH CHECK OPTION का उपयोग नहीं किया है, इसलिए हम 'Info' में एक नई पंक्ति सम्मिलित/अपडेट कर सकते हैं, भले ही यह इसकी परिभाषा से मेल नहीं खाती। यह निम्न क्वेरी और इसके परिणाम में दर्शाया गया है:
mysql> INSERT INTO Info(Id, Name, Address, Subject) values(132, 'Shyam','Chandigarh', 'Economics'); Query OK, 1 row affected (0.37 sec) mysql> Select * from student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Chandigarh | Literature | | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | | 132 | Shyam | Chandigarh | Economics | +------+---------+------------+------------+ 5 rows in set (0.00 sec) mysql> Select * from info; +------+-------+---------+-----------+ | Id | Name | Address | Subject | +------+-------+---------+-----------+ | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | +------+-------+---------+-----------+ 2 rows in set (0.00 sec)
उपरोक्त परिणाम सेट दर्शाता है कि नई पंक्ति 'Info' की परिभाषा से मेल नहीं खाती इसलिए यह व्यू में दिखाई नहीं देती। अब, निम्न क्वेरी में, हम उसी व्यू 'Info' को बना रहे हैं
'WITH CHECK OPTION' का उपयोग करके:
mysql> Create OR Replace VIEW Info AS Select Id, Name, Address, Subject from student_info WHERE Subject = 'Computers' WITH CHECK OPTION; Query OK, 0 rows affected (0.06 sec)
अब, यदि हम उस पंक्ति को सम्मिलित करने का प्रयास करेंगे जो व्यू 'Info' की परिभाषा से मेल खाती है, तो MySQL हमें ऐसा करने की अनुमति देता है। यह निम्न क्वेरी और इसके परिणाम से स्पष्ट हो सकता है।
mysql> INSERT INTO Info(Id, Name, Address, Subject) values(133, 'Mohan','Delhi','Computers'); Query OK, 1 row affected (0.07 sec) mysql> Select * from info; +------+-------+---------+-----------+ | Id | Name | Address | Subject | +------+-------+---------+-----------+ | 125 | Raman | Shimla | Computers | | 130 | Ram | Jhansi | Computers | | 133 | Mohan | Delhi | Computers | +------+-------+---------+-----------+ 3 rows in set (0.00 sec)
लेकिन मान लीजिए यदि हम उस पंक्ति को सम्मिलित करने का प्रयास करेंगे जो व्यू 'Info' की परिभाषा से मेल नहीं खाती, तो MySQL हमें ऐसा करने की अनुमति नहीं देगा और त्रुटि देगा:
mysql> INSERT INTO Info(Id, Name, Address, Subject) values(134, 'Charanjeet','Amritsar','Geophysics'); ERROR 1369 (HY000): CHECK OPTION failed