ऐसा लगता है कि आप पूछ रहे हैं कि क्या परमाणु ऑपरेशन में ट्रिगर को बदलना संभव है, जहां, अगर नई परिभाषा विफल हो जाती है, तो आप पुराने को नहीं खोते हैं ... इसी तरह 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 TRIGGER
MySQL के लिए उनके ड्रॉप-इन प्रतिस्थापन में समर्थन जोड़ा गया ।
https://mariadb.com/kb/en/mariadb/create-trigger/
5.7 के रूप में ओरेकल का MySQL अभी भी ऊपर के समाधान पर निर्भर करता है।