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:
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!