Triggers et mots NEW et OLD

Résolu/Fermé
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 18 août 2010 à 15:00
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 26 août 2010 à 11:00
Bonjour,

je dois crée un trigger qui se déclenchera lors d' INSERT OU d' UPDATE dans ma BD principale et qui va proceder aux INSERT OU UPDATE fait dans ma BD principale, dans ma seconde BD . Pour la synthase de base c'est ok :

delimiter $$

CREATE TRIGGER nom_trigger
AFTER INSERT ON ma_bd_principale
FOR EACH ROW
BEGIN
 END$$



Deux questions :

-J'ai lu la doc Mysql sur NEW et OLD mais je ne comprends pas la façon d'utiliser. Voici le paragraphe de la doc :

Cependant, dans la commande d'activation d'un déclencheur, vous pouvez faire référence aux colonnes dan la table associée au déclencheur en utilisant les mots OLD et NEW. OLD.col_name faire référence à une colonne d'une ligne existante avant sa modification ou son effacement. NEW.col_name faire référence à une colonne d'une ligne après insertion ou modification.


-Est il possible qu'un trigger se déclenche uniquement après tous les INSERT et UPDATE de la BD ou bien doit il se déclencher a chaque insert et a chaque update?

Merci pour votre aide.



4 réponses

PRK Messages postés 795 Date d'inscription mardi 4 septembre 2007 Statut Membre Dernière intervention 6 décembre 2015 113
18 août 2010 à 15:18
un trigger est rattaché à une table et une seule,

cela signifie que ton trigger se declenchera a l'insert ou l'update sur une seule table que tu auras spécifié dans ton trigger.

les directive NEW et OLD te permette d'avoir les 2 valeurs lors d'un update.

NEW correspondant à la valeur qui a été inséré lors de l'instruction et OLD celle qui figurait dans l'enregistrement avant l'execution de l'instruction.

Ainsi lors de ton trigger tu peut faire des comparaison de changement d'état (si OLD = false et que new = true) alors peut-être que tu as besoin de faire des modifications sur d'autres tables pour une raison quelconque.

si tu es joueur, imagine dans un jeu ou ton personnage augmente de niveau et passe un niveau au hasard : 21 et bien peut-être qu'au niveau 21 ton personnage acquiera un nouveau sort. Eh bien, dans ce cas je pense que ton trigger peut aller modifier un enregistrement d'une autre table afin de t'autoriser l'utilisation de ce nouveau sort.

En espérant avoir pu t'aider;
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
18 août 2010 à 15:43
Merci pour ton explication qui m'a un peu plus éclairci l'utilisation de NEW et OLD même si cela reste encore flou quand a l'utilisation mais je continue a creuser

Merci encore
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
18 août 2010 à 17:12
Bon je suis un peu paumé .Voila je récapitule : J'ai deux tables table1 et table2 avec les champs suivants :

table1
id
login
pass
mail

table2
ref_pers
user
passwd
email


Les correspondances entre les deux tables sont :
id = ref_pers
login = user
pass = passwd
mail = email


Comment dois je m'y prendre pour que dès qu'il y a un INSERT ou un UPDATE dans la table1 le trigger se declenche et fasses les INSERT ou UPDATE dans la table2?

Merci pour votre aide.
0
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 22
26 août 2010 à 11:00
Merci c'est résolu.
0