déclencheur de niveau ligne vs déclencheur niveau instruction

J’ai du mal à comprendre la différence entre les «déclencheurs au niveau des lignes» et les «déclencheurs au niveau des instructions».

D’après ce que j’ai compris, dans le scénario de création d’un déclencheur de niveau instruction, la table entière peut être modifiée. Un déclencheur de niveau de ligne ne me permettrait que de modifier le tuple affecté par l’événement spécifique du déclencheur.

Est-ce correct? Est-ce que quelqu’un a un exemple des deux?

Merci!

La principale différence n’est pas ce qui peut être modifié par le déclencheur, qui dépend du SGBD. Un déclencheur (niveau ligne ou instruction) peut modifier une ou plusieurs lignes, de la même table ou d’autres tables et peut avoir des effets en cascade (déclencher d’autres actions / déclencheurs), mais tout dépend du SGBD.

La principale différence est le nombre de fois que le déclencheur est activé. Imaginez que vous ayez une table de lignes de 1M et que vous exécutiez:

UPDATE t SET columnX = columnX + 1 

Un déclencheur de niveau instruction sera activé une fois (et même si aucune ligne n’est mise à jour). Un déclencheur de niveau ligne sera activé un million de fois, une fois pour chaque ligne mise à jour .


Une autre différence est la commande ou l’activation. Par exemple, dans Oracle, les 4 différents types de déclencheurs seront activés dans l’ordre suivant:

 Before the sortingggering statement executes Before each row that the sortingggering statement affects After each row that the sortingggering statement affects After the sortingggering statement executes 

Dans l’exemple précédent, nous aurions quelque chose comme:

 Before statement-level sortinggger executes Before row-level sortinggger executes One row is updated After row-level sortinggger executes Before row-level sortinggger executes Second row is updated After row-level sortinggger executes ... Before row-level sortinggger executes Millionth row is updated After row-level sortinggger executes After statement-level sortinggger executes 

Vous pouvez souhaiter que l’action de déclenchement s’exécute une fois que le client exécute une instruction modifiant un million de lignes (déclencheur au niveau de l’instruction). Vous pouvez également déclencher l’action une fois pour chaque ligne modifiée (déclencheur de niveau ligne).

EXEMPLE : Disons que vous avez un déclencheur qui fera en sorte que tous les élèves du secondaire obtiennent leur diplôme. C’est-à-dire que lorsque la note de l’aîné est de 12 et que nous l’augmentons à 13, nous voulons définir la note à NULL .

Pour un déclencheur au niveau de l’instruction, après l’exécution de l’instruction d’augmentation, vérifiez une fois la totalité du tableau pour mettre à jour les valeurs de grade 13 à NULL .

Pour un déclencheur de niveau ligne, vous indiquez, après chaque ligne mise à jour, que le niveau de la nouvelle ligne est mis à NULL s’il est 13.

Un déclencheur de niveau instruction ressemblerait à ceci:

 create sortinggger stmt_level_sortinggger after update on Highschooler begin update Highschooler set grade = NULL where grade = 13; end; 

et un déclencheur de niveau ligne ressemblerait à ceci:

 create sortinggger row_level_sortinggger after update on Highschooler for each row when New.grade = 13 begin update Highschooler set grade = NULL where New.ID = Highschooler.ID; end; 

Notez que SQLite ne prend pas en charge les déclencheurs au niveau des instructions. Ainsi, dans SQLite, le FOR EACH ROW est facultatif.

La principale différence entre les déclencheurs de niveau instruction est la suivante:

déclencheur de niveau instruction: basé sur le nom, cela fonctionne si une instruction est exécutée. Ne dépend pas du nombre de lignes ou de lignes effectuées. Il ne s’exécute qu’une seule fois. Exp: si vous souhaitez mettre à jour le salaire de chaque employé du département RH et à la fin, vous devez savoir combien de lignes ont été affectées, ce qui signifie combien de salaires ont été augmentés, puis utiliser le déclencheur au niveau des relevés. Veuillez noter que le déclencheur sera exécuté même si aucune ligne n’est mise à jour car il est appelé au niveau de l’instruction si une instruction a été exécutée. Aucun problème si cela affecte des lignes ou non.

Déclencheur de niveau de ligne: s’exécute chaque fois qu’une ligne est affectée. Si zéro ligne a été affectée. aucun déclencheur de niveau de ligne ne s’exécute. Si vous souhaitez supprimer un employé de la table emp dont le service est HR et que vous souhaitez le supprimer de la table emp, le nombre de 1. Ensuite, vous devez opter pour un déclencheur de niveau de ligne.

le déclencheur de niveau instruction est une seule fois pour les instructions dml

si vous voulez exécuter l’instruction lorsque le nombre de lignes est modifié, cela peut être possible par des déclencheurs de niveau instruction .. viseversa … lorsque vous souhaitez exécuter votre déclaration à chaque modification sur votre nombre de lignes, vous devez choisir le niveau ligne déclencheurs ..

par exemple: les déclencheurs de niveau instruction fonctionnent lorsque la table est modifiée .. plus de nombres d’enregistrements sont effectués. et les déclencheurs de niveau de ligne fonctionnent pour chaque modification ou modification de ligne.