Maison > base de données > tutoriel mysql > le corps du texte

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
Libérer: 2024-10-28 17:15:29
original
484 Les gens l'ont consulté

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!