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

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

अद्यतन योग्य व्यू के मामले में, यह काफी संभव है कि हम उस डेटा को अपडेट करें जो व्यू के माध्यम से दिखाई नहीं देता क्योंकि हम एक व्यू बनाते हैं जो केवल तालिका के आंशिक डेटा को प्रकट करता है। ऐसे अपडेट व्यू को असंगत बनाते हैं। हम 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
  1. - MySQL में विशिष्ट मान और उनकी गिनती कैसे वापस करें

    केवल विशिष्ट मान वापस करने के लिए, GROUP BY क्लॉज का उपयोग करें। पहले एक टेबल बनाते हैं: mysql> create table DemoTable754 (ProductPrice int); Query OK, 0 rows affected (0.48 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable754 values(200); Query OK, 1 ro

  1. - MySQL में कैस्केड कैसे देखें

    SHOW CREATE TABLE का उपयोग करके टेबल परिभाषा और कैस्केड देखना कैस्केड देखने के लिए MySQL में SHOW CREATE TABLE का उपयोग करें। पहले टेबल बनाएं: create table DemoTable1378 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, EmployeeId varchar(20), EmployeeFirstName varchar(20), EmployeeLastName varchar(20)

  1. - MySQL VIEW में WHERE क्लॉज का उपयोग कैसे करें?

    MySQL VIEW पर WHERE क्लॉज लागू करना MySQL VIEW एक आभासी टेबल है जो एक SELECT क्वेरी के परिणाम सेट पर आधारित होती है। आप किसी भी नियमित टेबल की तरह VIEW पर WHERE क्लॉज लागू करके परिणामों को फ़िल्टर कर सकते हैं। उदाहरण: छात्र VIEW बनाना और फ़िल्टर करना पहले एक छात्र टेबल बनाते हैं: SELECT * FROM Dem