Maison > Article > base de données > Comment puis-je mettre à jour la même table dans un déclencheur MySQL ?
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 d'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 :
<code class="sql">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;</code>
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 déclencheur.
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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!