Maison  >  Article  >  base de données  >  Comment mettre à jour les lignes d'une même table à l'aide de déclencheurs : une solution aux périodes qui se chevauchent ?

Comment mettre à jour les lignes d'une même table à l'aide de déclencheurs : une solution aux périodes qui se chevauchent ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 17:15:29485parcourir

How to Update Rows in the Same Table Using Triggers: A Solution to Overlapping Time Periods?

Mise à jour d'une autre ligne dans la même table à l'aide de déclencheurs

Le problème :

Maintenir les enregistrements avec des périodes qui se chevauchent, il faut souvent mettre à jour la date de fin des enregistrements précédents lorsqu'un nouveau est inséré avec une date de début qui chevauche la plage existante.

La tentative originale :

Le déclencheur fourni tente de mettre à jour la date de fin d'une ligne existante avec la valeur ADDDATE(NEW.startDate, -1) où procKey correspond à la nouvelle ligne et la date de fin est 20501231. Cependant, cette approche entraîne l'erreur « Impossible de mettre à jour ». table 'split' dans la fonction/le déclencheur stocké car elle est déjà utilisée par l'instruction qui a invoqué cette fonction/le déclencheur stocké."

La solution :

Malheureusement, les déclencheurs ne mettre à jour directement les autres lignes de la même table que la ligne qui a déclenché le déclencheur. Au lieu de cela, une approche alternative est requise.

Utilisation d'une procédure stockée :

Créez une procédure stockée qui encapsule la logique suivante :

  1. Insérez ou mettez à jour la nouvelle ligne dans la table fractionnée.
  2. Mettez à jour la date de fin de la ligne précédente avec la procKey correspondant à la NOUVELLE ligne et la date de fin qui correspond à la date future (par exemple, 20501231) pour être ADDDATE(NEW. startDate, -1).
  3. Validez la transaction pour garantir que les modifications sont persistantes.

Cette approche permet de mettre à jour plusieurs lignes de la même table au sein d'une seule transaction, évitant ainsi conflits qui peuvent survenir avec des déclencheurs.

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