ดูเหมือนว่าคุณกำลังถามว่าเป็นไปได้หรือไม่ที่จะเปลี่ยนทริกเกอร์ในการดำเนินการปรมาณูซึ่งหากคำจำกัดความใหม่ล้มเหลวคุณจะไม่สูญเสียสิ่งเก่า ... คล้ายกับCREATE OR REPLACE VIEW
ซึ่งแทนที่คำจำกัดความการดูหากคำจำกัดความใหม่ ถูกต้อง แต่ปล่อยให้เครื่องเก่าแทนที่หากคุณไม่สามารถแทนที่ได้
น่าเสียดายที่ไม่มีALTER TRIGGER
หรือCREATE OR REPLACE TRIGGER
อยู่ใน MySQL
ฉันขอแนะนำว่าวิธีปฏิบัติที่ดีที่สุดคือล็อคตารางที่ตัวเรียกใช้งานอยู่ดังนั้นจึงไม่มีผลกระทบต่อแถวเมื่อไม่มีตัวเรียก ปล่อยและเพิ่มทริกเกอร์ในขณะที่ตารางถูกล็อคได้รับอนุญาต
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;
อัปเดต: MariaDB ในเวอร์ชัน 10.1.4 เพิ่มการรองรับCREATE OR REPLACE TRIGGER
การแทนที่สำหรับ MySQL
https://mariadb.com/kb/en/mariadb/create-trigger/
ออราเคิล MySQL ในฐานะ 5.7 ยังคงพึ่งพาวิธีแก้ปัญหาข้างต้น