দেখে মনে হচ্ছে আপনি পারমাণবিক ক্রিয়াকলাপে ট্রিগার পরিবর্তন করা সম্ভব কিনা তা জিজ্ঞাসা করছেন, যেখানে নতুন সংজ্ঞা ব্যর্থ হলে আপনি পুরানোটিকে হারাবেন না ... অনুরূপ CREATE OR REPLACE VIEW
, যা নতুন সংজ্ঞা থাকলে ভিউ সংজ্ঞাটি প্রতিস্থাপন করে বৈধ, তবে এটি পুরানো জায়গায় রেখে দেয়, যদি আপনি এটি প্রতিস্থাপন করতে না পারেন।
দুর্ভাগ্যক্রমে, মাইএসকিউএল নেই 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
মাইএসকিউএল-এর জন্য তাদের ড্রপ-ইন প্রতিস্থাপনে সমর্থন যোগ করেছে।
https://mariadb.com/kb/en/mariadb/create-trigger/
ওরাকল এর মাইএসকিউএল 5.7 হিসাবে এখনও উপরের সমাধানের উপর নির্ভর করে।