Heim  >  Artikel  >  Datenbank  >  So aktualisieren Sie Zeilen in derselben Tabelle mithilfe von Triggern: Eine Lösung für überlappende Zeiträume?

So aktualisieren Sie Zeilen in derselben Tabelle mithilfe von Triggern: Eine Lösung für überlappende Zeiträume?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-28 17:15:29485Durchsuche

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

Eine andere Zeile in derselben Tabelle mithilfe von Triggern aktualisieren

Das Problem:

Datensätze pflegen Bei überlappenden Zeiträumen ist es häufig erforderlich, das Enddatum früherer Datensätze zu aktualisieren, wenn ein neuer mit einem Startdatum eingefügt wird, das den vorhandenen Bereich überschneidet.

Der ursprüngliche Versuch:

Der bereitgestellte Trigger versucht, das Enddatum einer vorhandenen Zeile mit dem Wert ADDDATE(NEW.startDate, -1) zu aktualisieren, wobei der procKey mit der NEUEN Zeile übereinstimmt und das Enddatum 20501231 ist. Dieser Ansatz führt jedoch zu der Fehlermeldung „Aktualisierung nicht möglich.“ Tabelle wird in der gespeicherten Funktion/dem gespeicherten Trigger „aufgeteilt“, weil sie bereits von der Anweisung verwendet wird, die diese gespeicherte Funktion/den gespeicherten Trigger aufgerufen hat.“

Die Lösung:

Trigger können dies leider nicht Aktualisieren Sie direkt andere Zeilen in derselben Tabelle wie die Zeile, die den Auslöser ausgelöst hat. Stattdessen ist ein alternativer Ansatz erforderlich.

Verwendung einer gespeicherten Prozedur:

Erstellen Sie eine gespeicherte Prozedur, die die folgende Logik kapselt:

  1. Fügen Sie die neue Zeile in die geteilte Tabelle ein oder aktualisieren Sie sie.
  2. Aktualisieren Sie das Enddatum der vorherigen Zeile mit dem procKey, der mit der NEUEN Zeile übereinstimmt, und dem Enddatum, das mit dem zukünftigen Datum übereinstimmt (z. B. 20501231), auf ADDDATE(NEW). Startdatum, -1).
  3. Übernehmen Sie die Transaktion, um sicherzustellen, dass die Änderungen dauerhaft sind.

Dieser Ansatz ermöglicht Aktualisierungen mehrerer Zeilen in derselben Tabelle innerhalb einer einzigen Transaktion und vermeidet so das Konflikte, die mit Auslösern entstehen können.

Das obige ist der detaillierte Inhalt vonSo aktualisieren Sie Zeilen in derselben Tabelle mithilfe von Triggern: Eine Lösung für überlappende Zeiträume?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn