2009-04-04 8 views
5

È vero che non riesco a modificare un trigger MySQL, devo rilasciarlo e crearne uno nuovo?È vero che non posso modificare un trigger MySQL, devo lasciarlo e crearne uno nuovo?

Inoltre, essendo un nuovo arrivato relativamente ai trigger, sembra che siano suscettibili di causare dati "errati". Ad esempio, potrei desiderare l'attivazione di un trigger (inserimento di dati in un'altra tabella) dopo un particolare tipo di query di aggiornamento, ma non di altri.

Eventuali suggerimenti qui ricevuti con gratitudine!

risposta

6

Edit: Sì, è vero che le versioni 5.n e 6.n di MySQL 5 & 6 implementare CREATE TRIGGER e DROP TRIGGER e nient'altro. Secondo this hunk of Postgres documentation, non c'è neanche CREATE TRIGGER in SQL 92, in modo da considerare fortunato di avere TRIGGER a tutti :-)

Il Visual Studio MySQL plugin documentation ha:

Per modificare un trigger esistente, fare doppio clic su un nodo del trigger che si desidera modificare, oppure fare clic con il tasto destro su questo nodo e scegliere il comando Altera Trigger da un menu di scelta rapida. Uno dei comandi apre l'editor SQL.

... che sembra fare quello che vuoi. La mia ipotesi è che si tratta di zucchero GUI e dietro le quinte si ottiene un DROP CREATE.

Per quanto riguarda un trigger per alcuni UPDATE e non altri, SQL ha esattamente uno UPDATE per tabella. Metti una clausola IF all'inizio del tuo trigger UPDATE in modo che la tua logica - qualunque cosa tu stia facendo in alcuni dei tuoi UPDATE s - viene eseguita solo quando ritieni che sia appropriata.

+0

Grazie per quello, avevo notato quell'articolo sui miei viaggi. Non sto usando il plug-in di Visual Studio però. :(sembra dura non posso modificare le azioni in un trigger una volta creato. Ancora non importa! – cw84

2

MySQL ha SOSTITUIRE IL TRIGGER, giusto?

Come un sidenote .. È un problema? Se ti preoccupa che le query vengano eseguite tra DROP e CREATE, puoi sempre bloccare il tavolo in anticipo.

+0

Puoi bloccare la tabella? In MySQL tutte le istruzioni DDL implicano implicitamente la transazione. A meno che non mi sbaglio, i blocchi verranno rilasciati da il DROP TRIGGER ... – nathan

+0

Lo riprendo, ho esaminato il problema e sembra che i blocchi non vengano rilasciati dalle istruzioni DROP TRIGGER o CREATE TRIGGER. È spiegato qui: http://dev.mysql.com/doc/ refman/5.0/it/lock-tavoli-e-transactions.html – nathan

Problemi correlati