Je me demande s'il est possible de mettre à jour une définition de déclencheur dans MySQL. Par exemple, j'ai un déclencheur T et je veux lui ajouter de nouvelles fonctionnalités.
Mon hypothèse est que je dois le supprimer et le recréer.
Quelles sont les meilleures pratiques d'administration de la base de données pour de tels scénarios?
On dirait que vous demandez s'il est possible de modifier un déclencheur dans une opération atomique, où, si la nouvelle définition échoue, vous ne perdez pas l'ancienne ... similaire à CREATE OR REPLACE VIEW
, qui remplace la définition de la vue si la nouvelle définition est valide, mais laisse l'ancienne en place, si vous ne pouvez pas la remplacer.
Malheureusement, il n'y a pas de ALTER TRIGGER
ou CREATE OR REPLACE TRIGGER
dans MySQL.
Je suggérerais que la meilleure pratique consiste à verrouiller la table où se trouve le déclencheur, afin qu'aucune ligne ne soit affectée avec le déclencheur absent. La suppression et l'ajout de déclencheurs lorsqu'une table est verrouillée est autorisé.
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;
Mise à jour: MariaDB, dans la version 10.1.4, ajout du support CREATE OR REPLACE TRIGGER
à leur remplacement de remplacement pour MySQL.
https://mariadb.com/kb/en/mariadb/create-trigger/
MySQL d'Oracle à partir de 5.7 repose toujours sur la solution ci-dessus.