Hallo,
ich habe momentan das Problem, dass ich auf dem Webserver, den ich nutze, das „LOCK TABLES“-Privileg nicht besitze. Ich hoffe ja, dass sich das ändern lässt, aber falls nicht, hier eine Frage, mit deren positiver Antwort sich das Locken vielleicht umgehen ließe:
Ich habe eine Tabelle, in die ich einen neuen Datensatz einfüge. Dieser Datensatz bezieht sich auf einen anderen und soll daher „unter“ diesem einsortiert werden, sprich, er übernimmt dessen Positionsnummer (PN), woraufhin der bezogene Datensatz dessen PN erhöht bekommt. Gleiches passiert natürlich mit allen Datensätzen, die eine höhere PN haben als der bezogene Datensatz ursprünglich hatte.
Das Vorgehen ist also wie folgt (Pseudo-Code):
SELECT PN AS P WHERE ID= BezugsID
UPDATE PN=PN+1 WHERE PN\>=P
UPDATE PN=P WHERE ID= NeueID
Dass hier kein anderer Prozess mit dem gleichen Anliegen dazwischenfunken darf, ist klar, und momentan unterbinde ich das, indem ich die Tabelle vorher locke und erst danach wieder freigebe.
Die Frage ist nun, ob man diese drei Vorgänge irgendwie in eine einzige Aktion packen kann. Ich wüsste nicht, wie das gehen sollte, sei es nun mit wilden JOINs, Sub-Selects oder was auch immer. Aber vielleicht hat ja trotzdem jemand eine Idee, wie man ein „Zwischenergebnis“ erhalten und weiterverarbeiten kann, denn darauf scheint es hier hinauszulaufen.
Danke,
Kristian