Maison  >  Article  >  base de données  >  Comment puis-je mettre à jour la même table dans un déclencheur MySQL ?

Comment puis-je mettre à jour la même table dans un déclencheur MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 16:58:02930parcourir

How can I update the same table within a MySQL trigger?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn