Solution de contournement des déclencheurs MySQL pour la mise à jour de la même table
MySQL empêche les déclencheurs de mettre à jour les lignes de la même table à laquelle ils sont affectés, empêchant ainsi les appels récursifs . Malgré cette limitation, une solution de contournement viable existe.
Solution de contournement suggérée
Au lieu de mettre à jour directement les lignes dans un déclencheur, exploitez une procédure stockée qui exécute la logique souhaitée. Cette méthode sépare la tâche de mise à jour de ligne du déclencheur et vous permet de contourner la restriction.
Exemple
Considérez le scénario suivant :
CREATE TABLE MyTable (
id INT PRIMARY KEY,
attribute VARCHAR(255)
);
-- Trigger to insert a row into MyTable for each new parent product record
CREATE TRIGGER my_trigger AFTER INSERT ON Products
FOR EACH ROW
BEGIN
-- Issue SQL statement to call a stored procedure that performs the insert
CALL insert_attribute(NEW.id, 'Value');
END;
Dans l'exemple ci-dessus, le déclencheur my_trigger appelle la procédure stockée insert_attribute pour insérer une ligne dans MyTable lorsqu'un nouvel enregistrement est inséré dans la table Products, imitant efficacement la fonctionnalité d'une mise à jour directe de ligne dans le trigger.
Considérations supplémentaires
Bien que cette solution de contournement serve de solution fonctionnelle, il est important de noter qu'elle diffère d'un déclencheur traditionnel en termes de performances et de maintenabilité. Les procédures stockées peuvent introduire une surcharge et une complexité supplémentaires dans le système de base de données par rapport aux mises à jour de déclencheurs directs.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3