Parece que você está perguntando se é possível alterar um gatilho em uma operação atômica, onde, se a nova definição falhar, você não perde a antiga ... semelhante a CREATE OR REPLACE VIEW
, que substitui a definição de exibição se a nova definição é válido, mas deixa o antigo no lugar, se você não puder substituí-lo.
Infelizmente, não existe ALTER TRIGGER
ou CREATE OR REPLACE TRIGGER
no MySQL.
Eu sugeriria que a melhor prática é bloquear a tabela onde o gatilho mora, para que nenhuma linha seja impactada com o gatilho ausente. É permitido soltar e adicionar gatilhos enquanto uma tabela está bloqueada.
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;
Atualização: O MariaDB, na versão 10.1.4, adicionou suporte CREATE OR REPLACE TRIGGER
ao seu substituto para o MySQL.
https://mariadb.com/kb/en/mariadb/create-trigger/
O MySQL da Oracle a partir da versão 5.7 ainda conta com a solução acima.