Raketenwilli: SQL-Abfrage Effizienz? Strategieänderung

Beitrag lesen

Die Daten des Endvorgangs sollen immer aktuell sein, also muss ich dem User einen Hinweis geben, wenn sich Daten geändert haben und der Vorgang aktuallisiert werden muss.

Ich nehme mal an, dass die Benutzer in einer Tabelle eine oder mehrere Spalten updaten...

Du machst etwas wie

UPDATE table SET foo = 1 WHERE id = 2

und willst verhindern, dass das gemacht wird, wenn ein anderer Benutzer inzwischen den Wert (für foo) oder einen anderen Wert in der Zeile verändert hat.

Also machst Du ganz einfach:

UPDATE table SET foo = 1 WHERE id = 2 AND foo = 0 AND bar = 3;

(Das Update wird sodann also nur gemacht, wenn ALLE Spalten dem jeweils erwarteten/bekannten Wert entsprechen.)

  • Du bekommst die Anzahl der veränderten Zeilen zurück.

Und „Heureka!“ Ist die Anzahl der veränderten Zeilen == Null (0) dann „bedarf der Vorgang einer Aktualisierung“. Und das ganze ohne die Tabelle[n] oder Zeile[n] performancefressend auf Veränderungen zu überwachen.

Freilich könntest Du einen Updatezähler als Spalte in die Tabelle einbauen und den prüfen… müsstest den dann nur bei jedem Update der Zeile eins höher setzen als er aktuell ist (SET UpdateCounter=UpdateCounter+1)