Philipp Hasenfratz: SQL: Bedingtes Update durchführen?

Beitrag lesen

Halihallo Thomas

Nun will ich möglichst mit einem einzigen SQL-Statement festestellen, ob ich vor der ID_A=1, POS=2 eine neue Position einfügen kann. Hierzu müsste ja vorher Platzgeschaffen werden, also ein Update ( "POS=POS+1" )auf die POS >= 2, die zu ID_A gehören.

Ich habe ein bissle darüber nachgedacht. Bin zum Schluss gekommen, dass dies sicher
nicht über einen Query zu machen ist. Du brauchst _mindestens_ zwei. Ich hätte einige
unausgereifte Ideen im Hinterkopf, wie sich dies (zugegebenermassen unelegant, aber
wirklich kurz) machen lässt. Diese Tricks sind jedoch vom DBMS abhängig (also welches?)
und erfordern noch folgende Fragen zu beantworten:

Muss POS eine Zahl sein?
Muss jede Unterposition einer "Oberposition" mit eins anfangen (was jedoch durch dein
Beispiel mit nein zu beantworten ist, wäre es repräsentativ).
Muss der "Abstand" zwischen zwei Unterpositionen einer Position immer eins sein?

Gibt es nun eine Möglichkeit, das in einem SQL-Statement zu verpacken?

Falls dein DBMS stored procedures unterstützt?

Muss ich die Tabelle für das Update locken oder lässt MySQL während meiner Aktion sowieso niemand ran? Da ja hinterher auf jeden Fall noch ein Insert auf die gefundene/geschaffene Lücke kommt, wäre locken wohl ratsamer, oder?

Nur bei einem UPDATE bestimmt nicht; aber wenn du mindestens zwei Queries brauchst und
davon gehe ich aus, ja. Obwohl dies bei zeitunkritischen Anwendungen wohl kaum
problematisch sein dürfte.

Viele Grüsse

Philipp