Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-01 16:58:02
original
1055 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal