2017-04-14 4 views
0

J'ai un doute sur l'ordre d'exécution des déclencheurs.
Pour l'expliquer, je vais utiliser un exemple:
J'ai un déclencheur sur la table myTable, donc, à l'intérieur ce déclencheur il y a une mise à jour sur myTable, ce jet une autre instance du même déclencheur (j'appellerai première instance « A » et cette nouvelle instance « B »), maintenant la question est:
sera l'instance B a commencé de manière asynchrone et l'instance A poursuivre l'exécution, ou sera la instance B a démarré et l'instance Un attendra B achèvement?Déclenche l'ordre d'exécution

J'espère que je me suis expliqué

Désolé pour mon pauvre anglais

+0

Pourquoi voudriez-vous faire pour vous? Les déclencheurs doivent être utilisés avec parcimonie: ils ont un impact subtil mais peut-être profond sur les choses, et je ne peux pas penser à une bonne raison pour qu'un déclencheur mette à jour la table qui invoquerait de nouveau le déclencheur. – jleach

+0

C'est juste une curiosité à propos de l'exécution des déclencheurs, mais il y a une situation similaire sur un travail déjà créé – davidinho

Répondre

0

Je serais très surpris si la détente intérieure (B) ne bloque pas la gâchette externe (A). La raison en est Determinism - si B s'exécute de manière asynchrone, il est possible qu'il se termine avant ou après A, et s'ils essayent tous les deux de mettre à jour le même champ, vous ne pouvez pas garantir le résultat final.

Même si B s'est exécuté de manière asynchrone, l'instruction qui l'a déclenchée ne retournera que après tous les déclencheurs ont été terminés. Cela est dû aux principes Atomic et Consistent des SGBD.

Il y a un paramètre que vous pouvez utiliser pour déterminer si un déclencheur peut déclencher un autre déclencheur: Nested Triggers