È possibile modificare una definizione di trigger esistente in MySQL?


14

Mi chiedo se è possibile aggiornare una definizione di trigger in MySQL. Ad esempio, ho un grilletto T e voglio aggiungere alcune nuove funzionalità ad esso.

La mia ipotesi è che devo lasciarlo cadere e ricrearlo.

Quali sono le migliori pratiche nell'amministrazione del database per tali scenari?


Alex, hai cercato nella definizione di MySQL la definizione di trigger? Che cosa diceva; di quale parte non sei sicuro o che ti sta causando problemi quando tenti di implementarli?
Michael Green,

Non ho trovato alcuna informazione nella documentazione di MySQL se è possibile aggiornare un trigger o meno. Presumo che sia impossibile e voglio ricontrollare.
Alex,

Risposte:


19

Sembra che ti stia chiedendo se è possibile modificare un trigger in un'operazione atomica, dove, se la nuova definizione fallisce, non perdi quella precedente ... simile a CREATE OR REPLACE VIEW, che sostituisce la definizione della vista se la nuova definizione è valido, ma lascia in posizione quello vecchio, se non è possibile sostituirlo.

Sfortunatamente, non c'è ALTER TRIGGERo CREATE OR REPLACE TRIGGERin MySQL.

Vorrei suggerire che la migliore pratica è quella di bloccare la tabella in cui vive il trigger, quindi nessuna riga è influenzata dal trigger assente. È consentito rilasciare e aggiungere trigger mentre una tabella è bloccata.

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;

Aggiornamento: MariaDB, nella versione 10.1.4, ha aggiunto il supporto CREATE OR REPLACE TRIGGERalla loro sostituzione drop-in per MySQL.

https://mariadb.com/kb/en/mariadb/create-trigger/

MySQL di Oracle a partire da 5.7 si basa ancora sulla soluzione sopra.


2
"Oracle MySQL a partire dal 5.7 si basa ancora sulla soluzione sopra" - ancora il caso nella versione 8.0
Paul Campbell
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.