2010-09-29 13 views
38

मैंने 4 टेबल के साथ एक MySQL दृश्य बनाया। क्या डेटा को दृश्य में सम्मिलित करना संभव है और MySQL स्वचालित रूप से डेटा को सही तालिका में पास कर सकता है?क्या डेटा को MySQL दृश्य में सम्मिलित करना संभव है?

उत्तर

51

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

आप विषय पर अधिक जानकारी के लिए निम्न आलेख की जाँच कर सकते हैं:

निम्नलिखित उदाहरण पर विचार: अब

CREATE TABLE table_a (id int, value int); 
CREATE TABLE table_b (id int, ta_id int, value int); 

INSERT INTO table_a VALUES (1, 10); 
INSERT INTO table_a VALUES (2, 20); 
INSERT INTO table_a VALUES (3, 30); 

INSERT INTO table_b VALUES (1, 1, 100); 
INSERT INTO table_b VALUES (2, 1, 200); 
INSERT INTO table_b VALUES (3, 2, 300); 
INSERT INTO table_b VALUES (4, 2, 400); 

के एक दृश्य बना सकते हैं :

CREATE VIEW v AS 
    SELECT  a.id a_id, b.id b_id, b.ta_id, a.value v1, b.value v2 
    FROM  table_a a 
    INNER JOIN table_b b ON (b.ta_id = a.id); 

SELECT * FROM v; 
+------+------+-------+------+------+ 
| a_id | b_id | ta_id | v1 | v2 | 
+------+------+-------+------+------+ 
| 1 | 1 |  1 | 10 | 100 | 
| 1 | 2 |  1 | 10 | 200 | 
| 2 | 3 |  2 | 20 | 300 | 
| 2 | 4 |  2 | 20 | 400 | 
+------+------+-------+------+------+ 
4 rows in set (0.00 sec) 

निम्नलिखित INSERT विफल रहता है:

INSERT INTO v (a_id, b_id, ta_id, v1, v2) VALUES (3, 5, 3, 30, 500); 
-- ERROR 1393 (HY000): Can not modify more than one base table through a join view 

लेकिन हम दो आपरेशन में विभाजित कर सकते हैं:

INSERT INTO v (a_id, v1) VALUES (3, 30); 
-- Query OK, 1 row affected (0.00 sec) 
INSERT INTO v (b_id, ta_id, v2) VALUES (5, 3, 500); 
-- Query OK, 1 row affected (0.00 sec) 

परिणाम:

SELECT * FROM v; 
+------+------+-------+------+------+ 
| a_id | b_id | ta_id | v1 | v2 | 
+------+------+-------+------+------+ 
| 1 | 1 |  1 | 10 | 100 | 
| 1 | 2 |  1 | 10 | 200 | 
| 2 | 3 |  2 | 20 | 300 | 
| 2 | 4 |  2 | 20 | 400 | 
| 3 | 5 |  3 | 30 | 500 | 
+------+------+-------+------+------+ 
6 rows in set (0.00 sec) 
+0

वहाँ एक और पंक्ति जो ग़ायब है है –

+0

मैं देख सकता हूँ आपने उपरोक्त पंक्ति को हटा दिया है, क्योंकि यह 6 पंक्तियां कहता है जबकि आपके पास केवल 5 ऊपर हैं। मुझे भी एक ही समस्या का सामना करना पड़ रहा है –

+0

लिंक किए गए आलेख को देखना बहुत महत्वपूर्ण है। धन्यवाद। –

संबंधित मुद्दे