2009-08-04 15 views
5

मैं, एक अद्यतन करने के लिए कोशिश कर रहा हूँ MySQL 5.0 में फार्म की:MySQL 1443: इसका क्या अर्थ है?

ErrorNr. 1443 
The definition of table 'v' prevents operation UPDATE on table 't'. 

MySQL डॉक्स सूची इस त्रुटि है, लेकिन (हमेशा की तरह) डॉन:

update mytable.myfield t 
set f = 'blah' 
where t.id in (select v.id from myview v where ...); 

MySQL मुझसे कहता है यह नहीं कहता कि इसका क्या अर्थ है। क्या कोई मेरे लिए इस पर कुछ प्रकाश डाल सकता है? मैं केवल subquery में दृश्य का संदर्भ देता हूं, और मैं केवल मुख्य क्वेरी में तालिका का संदर्भ देता हूं, और मुझे नहीं पता कि ये अद्यतन को क्यों रोकेंगे। Google के साथ मिली एकमात्र चीज ट्रिगर्स से संबंधित MySQL बग डीबी में एक बग है, लेकिन (AFAIK) मेरे डीबी में कोई ट्रिगर नहीं है।

+3

क्या "myview" संदर्भ "mytable" कहीं भी है? –

उत्तर

7

मैं दृश्य MyView तालिका mytable पर आधारित होना चाहिए लगता है, तो यह है कि के रूप में यह myfield में परिवर्तन करता है, यह क्या ध्यान में रखते हुए है इसका ट्रैक खो देता है और इसलिए एक अवैध अद्यतन के लिए बनाता है।

मैं अपनी समीक्षा की परिभाषा को देखने की अनुशंसा करता हूं, ताकि आप इसे संदर्भित किए बिना अपनी क्वेरी लिख सकें। फिर आप इसे काम करने में सक्षम हो सकते हैं।

वैकल्पिक रूप से, अस्थायी तालिका में आईडी की सूची डंप करें और अपने सबक्वायरी के लिए इसका उपयोग करें।

रोब

+0

"एक अस्थायी तालिका में आईडी की सूची डंप करें" -> यही वह है जो मैंने कर दिया। (माई) एसक्यूएल में, जब भी मैं एक क्वेरी लिखता हूं जो तर्कसंगत रूप से सही है, आरडीबीएमएस ने आवश्यकतानुसार अस्थायी बनाने को संभाला है (एक्सप्लाइन ऐसा कहता है!), इसलिए यह मेरे लिए नहीं हुआ कि MySQL * कभी भी कह सकता है "मैं नहीं हूं ऐसा करने जा रहा है क्योंकि मुझे एक अस्थायी तालिका बनाने की आवश्यकता होगी "(हालांकि अधिक भ्रमित शब्दकोष में)। पारितोषिक के लिए धन्यवाद। – Ken

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