web-dev-qa-db-fra.com

Comment passer votre objet à la procédure de la gâchette?

J'utilise MySQL 5.6. Après insertion ou mise à jour, à l'intérieur de la gâchette, je suis une procédure d'appel, alors comment puis-je passer un objet neuf et ancien de la gâchette à la procédure?

2
Bhupendra Pandey

J'ai trouvé ceci: ( [~ # ~ ~] source [~ # ~]

Il y a une grande raison pour laquelle vous ne devez jamais appeler des procédures stockées à partir de déclencheurs.

Les déclencheurs sont, par nature, des procédures stockées. Leurs actions sont pratiquement difficiles à renvoyer. Même si toutes les tables sous-jacentes sont InnoDB, vous rencontrerez un volume proportionnel de serrures partagées de ligne et d'intermittence gênante à partir de serrures exclusives en rangée. Tel serait le cas si les déclencheurs manipulent des tables avec des insertions et des mises à jour stagnées pour effectuer des mvcc lourds à l'intérieur de chaque appel à une gâchette.

N'oubliez pas que les déclencheurs nécessitent des frais généraux. En fait, selon la programmation de la procédure stockée MySQL, indique le suivant:

Il est important de se rappeler que, par nécessité, des déclencheurs ajoutent des frais généraux à la déclaration DML auxquelles ils s'appliquent. La quantité réelle de frais généraux dépendra de la nature de la gâchette, mais --- Comme tous les déclencheurs MySQL exécutent pour chaque rangée - les frais généraux peuvent s'accumuler rapidement pour des déclarations qui traitent un grand nombre de lignes. Vous devez donc éviter de placer des déclarations SQL coûteuses ou du code de procédure dans les déclencheurs. Une explication élargie des frais de déclenchement est donnée aux pages 529-531. Le point de conclusion de cette section indique les éléments suivants:

La leçon ici est la suivante: puisque le code de déclenchement exécutera une fois pour chaque ligne affectée par une instruction DML, la gâchette peut facilement devenir le facteur le plus important de la performance DML. Le code à l'intérieur de l'organisme de déclenchement doit être aussi léger que possible et - en particulier - toute instruction SQL dans la gâchette doit être prise en charge par des index dans la mesure du possible.

Vérification ( Rolandomysqldba Réponse.

2
oNare