MySQL déclenche impossible de mettre à jour les lignes dans la même table que le déclencheur est attribué. Solution de contournement proposée?
MySQL ne prend pas en charge la mise à jour des lignes de la même table le déclencheur est attribué à l'appel pourrait devenir récursive. Quelqu'un aurait-il des suggestions sur une bonne solution/alternative? Droit maintenant, mon plan est d'appeler une procédure stockée qui effectue la logique, que je voulais vraiment dans un déclencheur, mais j'aimerais entendre comment les autres ont contourné cette limitation.
Edit: Un peu plus de fond, comme demandé. J'ai une table qui stocke les attributs des produits d'affectations. Lorsqu'un nouveau produit parent enregistrement est inséré, j'aimerais le déclencheur pour effectuer un correspondant insérer dans le même tableau pour chaque enregistrement enfant. Cette dénormalisation est nécessaire pour la performance. MySQL ne supporte pas cela et lance:
Can't update table 'mytable' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Une longue discussion sur la question sur MySQL forums essentiellement à: Utiliser une procédure stockée, qui est ce que je suis allé avec pour l'instant.
Merci d'avance!
Êtes-vous essayer de mettre à jour les lignes autres que celles que l'insert de mise à jour ou de supprimer des contenus?
Avez-vous jamais trouver une solution à cela ? - J'ai aussi besoin de mettre à jour plusieurs lignes dans la table même lorsque l'une des lignes avec un unique champ est mis à jour ?
OriginalL'auteur Cory House | 2010-02-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez effectivement les lignes dans la même table que le déclencheur. Le fil est lié à a même la solution.
Par exemple:
L'exemple ci-dessus met à jour la même table lors de l'insertion de déclencher des incendies.
Vous manipulez seulement les lignes, juste inséré. Cette question est au sujet de la manipulation d'autres lignes existantes dans la table lorsqu'une ligne est insérée.
OriginalL'auteur Ryaner
Je suppose que vous pourriez appeler la procédure stockée dans votre déclencheur. Cependant, si vous souhaitez mettre à jour certains champs dans les mêmes dossiers que vous sont en train de changer (comme un updatedby ou lastupdated colonne), alors vous pouvez le faire dans un beofre de déclenchement en fonction de la refernce manuel. http://dev.mysql.com/doc/refman/5.0/en/trigger-syntax.html
C'est une opération courante pour les déclencheurs et je trouve qu'il est difficile de croire qu'il n'est pas pris en charge.
OriginalL'auteur HLGEM
Si vous souhaitez mettre à jour la colonne que vous n'avez pas lire en fonction de déclenchement, puis comme une solution de contournement, vous pouvez placer la colonne dans la table distincte.
OriginalL'auteur psycho brm
Vous pouvez réellement le faire
Ci-dessous est un exemple pour la même
OriginalL'auteur amitchhajer
Cela a fonctionné pour moi 😀
Avant /Mise À Jour.
OriginalL'auteur user2206252