Có vẻ như bạn đang hỏi liệu có thể thay đổi trình kích hoạt trong hoạt động nguyên tử hay không, nếu định nghĩa mới không thành công, bạn sẽ không mất định nghĩa cũ ... tương tự CREATE OR REPLACE VIEW
, thay thế định nghĩa chế độ xem nếu định nghĩa mới là hợp lệ, nhưng để lại cái cũ, nếu bạn không thể thay thế nó.
Thật không may, không có ALTER TRIGGER
hoặc CREATE OR REPLACE TRIGGER
trong MySQL.
Tôi sẽ đề nghị rằng cách tốt nhất là khóa bảng nơi kích hoạt, vì vậy không có hàng nào bị ảnh hưởng khi không có cò. Thả và thêm các kích hoạt trong khi một bảng bị khóa được cho phép.
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;
Cập nhật: MariaDB, trong phiên bản 10.1.4, đã thêm hỗ trợ CREATE OR REPLACE TRIGGER
cho thay thế thả xuống của họ cho MySQL.
https://mariadb.com/kb/en/mariadb/create-trigger/
MySQL của Oracle tính đến ngày 5.7 vẫn dựa vào giải pháp trên.