DB-Willi: php, SQL, Multiuser - SESSION oder nicht ?

Beitrag lesen

Hi,

den konkurrierenden Betrieb kannst Du im Design der Tabellen (Datenmodell) und (mandatorisches UND) der DM-Queries (Data Manipulation) vorsehen.

Gib den Tabellen (oder einer zentralen, die in allen Queries beteiligt ist) eine Spalte mit einem Conflict Counter mit. Dieser wird vor jeder Veränderung mit ausgelesen und beim Zurückschreiben der Daten incrementiert. Daten dürfen nur zurückgeschrieben werden, wenn der ausgelesene Counter mit dem in der DB übereinstimmt. Sonst ist affected rows == 0, oder besser, ein Trigger löst eine definierte Exception aus, die dann für eine Meldung an den User genutzt werden kann.

Ersatzweise wird für den Zähler auch oft der Zeitpunkt der letzten Veränderung benutzt. Das ist aber noch relativ unsicher, da ein Zeitstempel nicht direkt abhängig vom Update ist und durch seine grobe Granularität (i.d.R. 1 Sekunde) trotzdem mehrere Threads denselben ausgelesen haben können.

good success
DB-Willi