Question

J'ai entendu parler de déclencheurs, et j'ai quelques questions.
Quels sont les éléments déclencheurs?
Comment puis-je les mettre en place?
Existe-il des précautions, à part les classiques SQL choses, qui devraient être prises?

Était-ce utile?

La solution

Les déclencheurs vous permettent d'exécuter une fonction dans la base de données que certains événements se produisent (par exemple, une insertion dans une table).

Je ne peux pas commenter sur mysql en particulier.

Précaution:Les déclencheurs peuvent être très séduisante, quand vous commencez à les utiliser, ils semblent comme une formule magique pour toutes sortes de problèmes.Mais, ils font de la "magie" des choses, si vous ne connaissez pas la base de données à l'intérieur, elle peut sembler vraiment des choses étranges se produisent (comme les insertions dans les autres tableaux, les données d'entrée change, etc).Avant de mettre en œuvre des choses comme un déclencheur, je serais sérieusement envisager plutôt l'application de l'utilisation d'une API à travers le schéma (de préférence dans la base de données, mais à l'extérieur si vous ne pouvez pas).

Certaines choses que j'avais toujours utiliser des déclencheurs pour

  • Garder la trace des "date_created" et "date_last_edited" champs
  • L'insertion de "ID"'s (oracle, où il n'y a pas d'auto-champ id)
  • En gardant l'historique des modifications

Choses que vous ne voulez pas utiliser des déclencheurs pour

  • les règles d'affaires/logique
  • tout ce qui se connecte à l'extérieur de la base de données (par exemple un service d'appel)
  • Contrôle d'accès
  • Tout ce qui n'est pas transactionnel ( tout ce que vous faites dans le trigger DOIT être en mesure de restaurer la transaction )

Autres conseils

À partir de dev.mysql.com, un déclencheur est

...un nom d'objet de base de données associé à une table et qui est activé lorsqu'un événement particulier se produit pour la table.

La syntaxe pour créer est également documentée sur le site.

Brièvement,

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

Et ils fournissent un exemple:

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;

Vous devez au moins respecter toutes les restrictions sur les fonctions stockées.Vous ne serez pas en mesure de verrouiller les tables, modifier les vues, ou de modifier le tableau qui a déclenché le trigger.Déclenche également peut causer des problèmes de réplication.

Un déclencheur est une base de données nommée objet qui est associé à une table et qui est activé lorsqu'un événement particulier se produit pour la table.

Pour créer un déclencheur:

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


Même si j'ai répondu à cette partie de la question est toujours debout.

Cette question est ancienne et les autres réponses sont très bon, mais depuis que l'utilisateur a demandé sur les précautions qui doivent être prises, je tiens à ajouter quelque chose:

  • Si vous utilisez la réplication dans un environnement complexe, ne pas en faire une utilisation massive des Déclencheurs, et ne pas appeler des procédures stockées à partir de déclencheurs.
  • Les déclencheurs sont lents dans MySQL.
  • Vous ne pouvez pas utiliser certaines instructions SQL au sein de déclencheurs.Et certains états sont autorisés mais doivent être évités, comme LOCK.La règle générale est:si vous ne comprenez pas les implications de ce que vous faites, vous ne devriez pas le faire.
  • Les déclencheurs peuvent causer les boucles sans fin, donc soyez prudent.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top