ichbinich: [MySQL] spaltenindex zickt rum

Hallo,

ich habe ine Tabelle mit den Spalten: ID, name, fremdschlüssel, position.

Pro Fremdschlüssel darf kein Wert bei Position doppelt vorkommen, also habe ich einen Unique-Index über diese beiden Spalten angelegt.

Die Position bildet die Grundlage für die Reihenfolge der Darstellung in einer Webapplikation. Dort kann man die einzelnen Elemente nach oben oder unten verschieben.

Was ich jetzt mache sind 3 Updates nacheinander.
Bspw. für das nach oben verschieben:
1. position des zu verschiebenen Elementes auf 0 setzen.
2. position des vorhergehenden Elementes um eins erhöhen
3. position des zu verschiebenen Elementes auf vorherigen Wert minus 1 setzen.

Beim zweiten Update bekomme ich eine Fehlermeldung: Duplicate entry '4-1' for key ..., obwohl dieser Wert ja nun nicht mehr existiert, da steht jetzt 4-0 drin.

Frage: Wie kann ich das umgehen oder lösen und gibt es vielleicht einen eleganteren Ansatz das zu lösen?

vg ichbinich

--
Kleiner Tipp:
Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
  1. Hi!

    1. position des zu verschiebenen Elementes auf 0 setzen.
    2. position des vorhergehenden Elementes um eins erhöhen
    3. position des zu verschiebenen Elementes auf vorherigen Wert minus 1 setzen.
      Beim zweiten Update bekomme ich eine Fehlermeldung: Duplicate entry '4-1' for key ..., obwohl dieser Wert ja nun nicht mehr existiert, da steht jetzt 4-0 drin.

    Dieses Problem konnte ich nicht nachvollziehen. Ich erhielt keine Fehler und der Tausch klappte auf diese Weise.

    Allerdings könnten sich zwei Vorgänge in die Quere kommen, was vielleicht unwahrscheinlich scheint aber möglich ist. Korrekterweise würde man den Vorgang im DBMS kapseln, beispielsweise mit einer Transaktion.

    Lo!