Domanda

Ho sentito parlare di trigger e ho alcune domande.
Cosa sono i trigger?
Come li configuro?
Ci sono delle precauzioni, oltre alle tipiche cose SQL, che dovrebbero essere prese?

È stato utile?

Soluzione

I trigger consentono di eseguire una funzione nel database quando si verificano determinati eventi (ad esempio, un inserimento in una tabella).

Non posso commentare specificamente mysql.

Precauzione:I trigger possono essere molto allettanti e quando inizi a usarli sembrano una bacchetta magica per tutti i tipi di problemi.Ma fanno accadere cose "magiche", se non conosci il database a fondo, può sembrare che accadano cose davvero strane (come inserimenti in altre tabelle, modifica dei dati di input, ecc.).Prima di implementare le cose come trigger, prenderei seriamente in considerazione l'idea di imporre l'uso di un'API attorno allo schema (preferibilmente nel database, ma all'esterno se non è possibile).

Per alcune cose utilizzerei ancora i trigger

  • Tenere traccia dei campi "date_created" e "date_last_edited".
  • Inserimento di "ID" (in Oracle, dove non è presente un campo ID automatico)
  • Conservazione della cronologia delle modifiche

Cose per le quali non vorresti usare i trigger

  • regole/logiche aziendali
  • tutto ciò che si connette all'esterno del database (ad esempio una chiamata al servizio web)
  • Controllo di accesso
  • Tutto ciò che non è transazionale (tutto ciò che fai nel trigger DEVE essere in grado di eseguire il rollback con la transazione)

Altri suggerimenti

Da dev.mysql.com, un trigger è

... un oggetto di database denominato associato a una tabella e che viene attivato quando si verifica un particolare evento per la tabella.

La sintassi per crearli è documentato anche in quel sito.

Brevemente,

CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt

E forniscono un esempio:

CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account FOR EACH ROW SET @sum = @sum + NEW.amount;

Devi almeno rispettare tutte le restrizioni sulle funzioni memorizzate.Non potrai bloccare tabelle, alterare visualizzazioni o modificare la tabella che ha attivato l'attivatore.Anche i trigger potrebbe causare problemi di replica.

Un trigger è un oggetto di database denominato associato a una tabella e che viene attivato quando si verifica un particolare evento per la tabella.

Per creare un trigger:

CREATE TRIGGER triggerName [BEFORE|AFTER] [INSERT|UPDATE|DELETE|REPLACE] ON tableName FOR EACH ROW SET stuffToDoHERE;


Anche se ho risposto a questa parte, l'altra domanda è ancora valida.

Questa domanda è vecchia e le altre risposte sono molto buone, ma poiché l'utente ha chiesto quali precauzioni dovrebbero essere prese, voglio aggiungere qualcosa:

  • Se usi la replica in un ambiente complesso, non fare un uso massiccio di trigger e non chiamare procedure memorizzate dai trigger.
  • I trigger sono lenti in MySQL.
  • Non è possibile utilizzare alcune istruzioni SQL all'interno dei trigger.E alcune istruzioni sono consentite ma dovrebbero essere evitate, come LOCK.La regola generale è:se non comprendi appieno le implicazioni di ciò che stai facendo, non dovresti farlo.
  • I trigger possono causare loop infiniti, quindi fai attenzione.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top