Synchroniser des tables avec un trigger
dev21
-
swed -
swed -
Bonjour,
je débute dans l'utilisation des triggers Mysql.
Le contexte:
3 bases de données, dans chacune des bdd , une table 'product' avec une colonne 'quantity'.
Le but:
La valeur 'quantity' de chaque table 'product' doivent être synchronisée.
exemple: si update de la table db1.product, mises à jour des tables db2.product, db3.product. Si update de la table db2.product, mises à jour des tables db1.product, db3.product.
J'ai ajouter un trigger sur la table db1.product:
Code :
ma question, si j'adapte le même trigger sur les autres tables comme ceci:
Code :
Code :
, cela va t-il engendrer une boucle infinie ? si oui comment puis-je contourner le problème ?
merci
je débute dans l'utilisation des triggers Mysql.
Le contexte:
3 bases de données, dans chacune des bdd , une table 'product' avec une colonne 'quantity'.
Le but:
La valeur 'quantity' de chaque table 'product' doivent être synchronisée.
exemple: si update de la table db1.product, mises à jour des tables db2.product, db3.product. Si update de la table db2.product, mises à jour des tables db1.product, db3.product.
J'ai ajouter un trigger sur la table db1.product:
Code :
delimiter $$ CREATE TRIGGER SYNCSTOCK AFTER UPDATE ON db1.product IF (NEW.reference != "") THEN FOR EACH ROW BEGIN UPDATE db2.product SET quantity = NEW.quantity WHERE reference = NEW.reference; UPDATE db3.product SET quantity = NEW.quantity WHERE reference = NEW.reference; END IF; END$$ delimiter ;
ma question, si j'adapte le même trigger sur les autres tables comme ceci:
Code :
delimiter $$ CREATE TRIGGER SYNCSTOCK AFTER UPDATE ON db2.product IF (NEW.reference != "") THEN FOR EACH ROW BEGIN UPDATE db1.product SET quantity = NEW.quantity WHERE reference = NEW.reference; UPDATE db3.product SET quantity = NEW.quantity WHERE reference = NEW.reference; END IF; END$$ delimiter ;
Code :
delimiter $$ CREATE TRIGGER SYNCSTOCK AFTER UPDATE ON db3.product IF (NEW.reference != "") THEN FOR EACH ROW BEGIN UPDATE db1.product SET quantity = NEW.quantity WHERE reference = NEW.reference; UPDATE db2.product SET quantity = NEW.quantity WHERE reference = NEW.reference; END IF; END$$ delimiter ;
, cela va t-il engendrer une boucle infinie ? si oui comment puis-je contourner le problème ?
merci
A voir également:
- Synchroniser des tables avec un trigger
- Table des matières word - Guide
- Synchroniser agenda google et outlook - Guide
- Synchroniser spotify sur plusieurs appareils - Guide
- Synchroniser favoris chrome - Guide
- Synchroniser chromecast - Guide
1 réponse
Bonjour ;
Oui, celà va engendrer une boucle infinie.
Pour ne plus avoir ce problème de boucle infinie, je te conseille de modifier tes updates comme ça :
UPDATE db2.product SET quantity = NEW.quantity WHERE reference = NEW.reference AND quantity <> NEW.quantity
Je te conseille également de faire l'update seulement si OLD.quantity <> NEW.quantity.
Comme ça, lorsque c'est un autre champ de la table qui est mis à jour, tu ne referas pas un update inutile...
Donc en ajoutant un test IF ( OLD.quantity <> NEW.quantity )
Peut-être faudrait-il aussi remettre en question la pertinence de la structure de la BDD...
Cordialement, M.
Oui, celà va engendrer une boucle infinie.
Pour ne plus avoir ce problème de boucle infinie, je te conseille de modifier tes updates comme ça :
UPDATE db2.product SET quantity = NEW.quantity WHERE reference = NEW.reference AND quantity <> NEW.quantity
Je te conseille également de faire l'update seulement si OLD.quantity <> NEW.quantity.
Comme ça, lorsque c'est un autre champ de la table qui est mis à jour, tu ne referas pas un update inutile...
Donc en ajoutant un test IF ( OLD.quantity <> NEW.quantity )
Peut-être faudrait-il aussi remettre en question la pertinence de la structure de la BDD...
Cordialement, M.