dedlfix: SQL Update bei vielen Anwendern

Beitrag lesen

Tach!

Ein PHP Script (IIS) macht in einer MS SQL Tabelle einen Udate auf eine Spalte. Hier steht nur eine Zahl drin, die um 1 erhöht wird. Die Zahl wird später für eine Auftragsnummer verwendet.

Meinst du so? UPDATE table SET x=x+1;

Besteht die Gefahr, dass bei vielen Anwendern die event. zeitgleich das Script aufrufen doppelte Nummern zurckgeliefert werden?

Das kommt darauf an, wie du die neue Zahl ermittelst. Führst du anschließend ein SELECT aus? Wenn ja, dann kann da beliebig viel Zeit dazwischen liegen, in der andere Prozesse abgewickelt werden. Ohne Locking oder Transaction mit passenden Isolation Level kann es inkonsistente Daten geben.

Oder handelt das der SQL Server das selber so aus, dass die Tabelle gesperrt ist und nichts passieren kann?

Wie genau stellst du dir eine solche Sperre vor? Von wann bis wann soll die gehen?

(Ich kann in diesem speziellen Fall nicht mit Transaktionen arbeiten)

Soweit ich das lese, kommt es auch bei Transactions darauf an, wie man sie ausführt. Bestimmte Isolation Level erlauben weiterhin das Lesen des alten Wertes, auch wenn eine unabgeschlossene Transaction bereits für sich einen Wert geändert hat. Select - Pause - Update kann durchaus zu einem TOCTTOU-Problem führen.

Mehr kann ich dir aber nicht antworten, weil ich da keine Erfahrungen habe sondern nur das Wissen aus der öffentlich verfügbaren Dokumentation.

dedlfix.