क्या MySQL में मौजूदा ट्रिगर परिभाषा को संशोधित करना संभव है?


14

मुझे आश्चर्य है कि क्या MySQL में ट्रिगर परिभाषा को अपडेट करना संभव है। उदाहरण के लिए, मेरे पास एक ट्रिगर टी है और मैं इसमें कुछ नई कार्यक्षमता जोड़ना चाहता हूं।

मेरी धारणा यह है कि मुझे इसे छोड़ने और पुनः बनाने की आवश्यकता है।

ऐसे परिदृश्यों के लिए डेटाबेस प्रशासन में सबसे अच्छे अभ्यास क्या हैं?


एलेक्स, क्या आपने ट्रिगर परिभाषा के लिए MySQL प्रलेखन में देखा है? इसने क्या कहा; आप किस भाग के बारे में अनिश्चित हैं, या जब आप उन्हें लागू करने का प्रयास करते हैं, तो आप समस्याओं का कारण बन रहे हैं?
माइकल ग्रीन

यदि ट्रिगर को अद्यतन करना संभव है या नहीं, तो मुझे MySQL प्रलेखन में कोई जानकारी नहीं मिली। मैं मानता हूं कि यह असंभव है और मैं दोबारा जांच करना चाहता हूं।
एलेक्स

जवाबों:


19

ऐसा लगता है कि आप पूछ रहे हैं कि क्या परमाणु ऑपरेशन में ट्रिगर को बदलना संभव है, जहां, अगर नई परिभाषा विफल हो जाती है, तो आप पुराने को नहीं खोते हैं ... इसी तरह CREATE OR REPLACE VIEW, जो नई परिभाषा को देखने की जगह को बदल देता है। मान्य है, लेकिन यदि आप इसे बदल नहीं सकते हैं तो पुराने को छोड़ दें।

दुर्भाग्य से, MySQL में कोई ALTER TRIGGERया नहीं है CREATE OR REPLACE TRIGGER

मैं सुझाव दूंगा कि सबसे अच्छी प्रैक्टिस उस टेबल को लॉक करना है जहां ट्रिगर रहता है, इसलिए ट्रिगर अनुपस्थित के साथ कोई भी पंक्तियां प्रभावित नहीं होती हैं। ड्रॉपिंग और ट्रिगर्स जोड़ना जबकि एक टेबल बंद है अनुमति दी जाती है।

mysql> LOCK TABLES t1 WRITE; -- the next prompt appears once you've obtained the lock
mysql> DROP TRIGGER t1_bi; 
mysql> DELIMITER $$
mysql> CREATE TRIGGER ti_bi BEFORE INSERT ON t1 FOR EACH ROW 
       BEGIN
       ...
       END $$
mysql> DELIMITER ;
mysql> UNLOCK TABLES;

अद्यतन: मारियाडीबी, 10.1.4 संस्करण में, CREATE OR REPLACE TRIGGERMySQL के लिए उनके ड्रॉप-इन प्रतिस्थापन में समर्थन जोड़ा गया ।

https://mariadb.com/kb/en/mariadb/create-trigger/

5.7 के रूप में ओरेकल का MySQL अभी भी ऊपर के समाधान पर निर्भर करता है।


2
"ओरेकल की MySQL 5.7 के रूप में अभी भी ऊपर के समाधान पर निर्भर करता है" - अभी भी संस्करण 8.0 में मामला है
पॉल कैम्पबेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.