एक ही टेबल पर अपडेट के बाद एक ट्रिगर में एक टेबल को अपडेट करना
एसक्यूएल में, एक ही टेबल पर अपडेट के बाद एक ट्रिगर में एक टेबल को अपडेट करना वही तालिका एक संभावित समस्या प्रस्तुत करती है। ऐसा इसलिए है क्योंकि अद्यतन कार्रवाई के लिए तालिका पहले से ही लॉक है, और उसी लेन-देन के हिस्से के रूप में निष्पादित ट्रिगर के भीतर तालिका तक पहुंचने का प्रयास करने पर विरोध हो सकता है।
इस प्रतिबंध से बचने के लिए, आप अपडेट कर सकते हैं AFTER के बजाय BEFORE विकल्प का उपयोग करके ट्रिगर में प्रभावित कॉलम। यह आपको मूल अद्यतन कार्रवाई होने से पहले तालिका के कॉलम को अपडेट करने की अनुमति देता है, यह सुनिश्चित करते हुए कि लेनदेन को अंतिम रूप देने से पहले तालिका में आवश्यक परिवर्तन किए गए हैं।
निम्नलिखित उदाहरण पर विचार करें:
CREATE TRIGGER upd_total_votes BEFORE UPDATE ON products_score FOR EACH ROW BEGIN SET new.votes_total = new.votes_1 new.votes_2 new.votes_3 new.votes_4 new.votes_5 END ;
इस उदाहरण में, ट्रिगर product_score तालिका पर प्रत्येक अद्यतन ऑपरेशन से पहले निष्पादित होगा। यह अपडेट किए गए कॉलम (वोट_1 से वोट_5) के मानों के आधार पर वोट_टोटल कॉलम के लिए नए मान की गणना करेगा और इसे ट्रिगर संदर्भ द्वारा प्रदान किए गए नए.वोट्स_टोटल वर्चुअल कॉलम में संग्रहीत करेगा।
जब आप तालिका अपडेट करते हैं , ट्रिगर यह सुनिश्चित करेगा कि वोट_टोटल कॉलम तदनुसार अपडेट किया गया है, भले ही अपडेट स्टेटमेंट स्पष्ट रूप से वोट_टोटल कॉलम को अपडेट नहीं करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3