Bonjour,
J'ai un petit problème avec ce qui semble être une limitation bête et méchante de mysql (j'espère me tromper)
Pour résumer, j'ai une table t1 où je dois faire des insert en fonction d'actions d'un utilisateur (php), mais des règles s'appliquent qui disent si je peux ou non faire un insert de tel ou tel type.
Là où ça se complique, c'est que les règles dépendent de ce qui est déjà dans ma table t1, et une autre table t2 liste les règles. Une colonne ok de t2 permet de savoir directement si la règle permet ou non un insert dans t1.
Actuellement j'ai donc ceci:
- une proc stock qui recalcule la colonne ok de t2 en fonction du contenu de t1
- un trigger qui lancer la proc stock à chaque insert/delete dans t1
Et, comme je ne suis pas à l'abris qu'un utilisateur tente un insert interdit, je doit vérifier les règles lors de l'insert, ce qui donne
insert into t1
select valeurs
from ...
where t2.ok
Et là MySQL me dit : Can't update table 't2' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Pourtant le trigger est en "after", donc l'insert devrait déjà avoir fini le "select valeurs from ... where t2.ok" et ne plus bloquer la table t2...
J'ai lu sur le web que quand on a cette erreur il faut passer en before mais ... la procédure stockée fait un calcul qui dépend du contenu de t1 et le but de l'invoquer à ce moment là est de prendre en compte la nouvelle ligne ... il me parait donc difficile de mettre mon trigger en "before"
Voilà, j'espère avoir été assez clair malgré la grosse simplification que j'ai faite :-)
Merci,
Cordialement,
aze555666
Partager