उत्तर: हाँ (अपडेटेबल व्यू के लिए)
MySQL में, यदि व्यू अपडेटेबल है, तो व्यू से DELETE, UPDATE, या INSERT ऑपरेशन अंतर्निहित बेस टेबल को प्रभावित करते हैं।
व्यावहारिक प्रदर्शन
बेस टेबल बनाना
mysql> CREATE TABLE deleteFromBaseTableDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(20)
-> );
mysql> INSERT INTO deleteFromBaseTableDemo(Name) VALUES
-> ('John'), ('Carol'), ('Bob'), ('Sam');
व्यू बनाना
mysql> CREATE VIEW delete_view AS
-> SELECT Id, Name FROM deleteFromBaseTableDemo;
व्यू और बेस टेबल डेटा (प्रारंभिक)
दोनों में 4 पंक्तियाँ: John, Carol, Bob, Sam
व्यू से पंक्ति हटाना
mysql> DELETE FROM delete_view WHERE Id = 4; Query OK, 1 row affected (0.26 sec)
व्यू के डेटा (हटाने के बाद)
mysql> SELECT * FROM delete_view; +----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | +----+-------+
बेस टेबल के डेटा (हटाने के बाद)
mysql> SELECT * FROM deleteFromBaseTableDemo; +----+-------+ | Id | Name | +----+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | +----+-------+
निष्कर्ष
Id=4 (Sam) की पंक्ति दोनों व्यू और बेस टेबल से हटा दी गई।
अपडेटेबल व्यू की शर्तें
व्यू अपडेटेबल है यदि:
- एकल बेस टेबल से चयन करता है
- कोई एग्रीगेट फ़ंक्शन नहीं (SUM, COUNT, आदि)
- कोई DISTINCT, GROUP BY, HAVING नहीं
- कोई UNION, UNION ALL नहीं
- कोई सबक्वेरी नहीं (WHERE/SELECT सूची में)
- कोई नॉन-अपडेटेबल व्यू रेफरेंस नहीं
- सभी कॉलम बेस टेबल के सीधे कॉलम हैं (अभिव्यक्ति नहीं)
नॉन-अपडेटेबल व्यू
यदि उपरोक्त शर्तें पूरी नहीं होतीं, तो व्यू केवल पढ़ने योग्य होता है और DELETE/UPDATE की अनुमति नहीं देता।
WITH CHECK OPTION
CREATE VIEW view_name AS SELECT * FROM table WHERE condition WITH CHECK OPTION;
यह सुनिश्चित करता है कि INSERT/UPDATE केवल उन पंक्तियों को प्रभावित करे जो व्यू की WHERE शर्त को पूरा करती हैं।