Zitat von
Jasocul:
Damit löst du allerdings nur Lock-Probleme. Ein DeadLock wirst du damit auch nicht lösen können. Diese müssen vom Programm von vornherein unterbunden sein. Die dürfen gar nicht erst entstehen.
Du solltest dein Datenbank-Design und dein Programm dahin gehend nochmal genau prüfen.
Wie sollte man diesen Fehler von vorneherein unterbinden ? So was kann doch nicht funktionieren oder liege ich da falsch ?
Ein beispiel wie soetwas einfach nachzustellen ist :
SQL-Code:
User1> START TRANSACTION;
User1> UPDATE TABLE1 SET FIELD1 = 9 WHERE ID = 12;
User2> START TRANSACTION
User2> UPDATE TABLE1 SET FIELD2 = 12 WHERE ID = 12;
User2 häng nun so lange, bist User1 ein Commit oder Rollback macht
User1> COMMIT;
User2 "deadlock - update conflicts with concurrent update."
würde User1 ein Rollback machen, wäre alles palleti
In diesem Beispiel, könnte ja ienfach die zweite Anweisung mit einer neuen Transaction erneut ausgeführt werden ...
Und das ist genau der Fall, der bei mir eintritt, da hilft kein redesign der Datenbank oder des Programmes um das zu verhindern (ohne damit auch ein gleichzeitiges arbeiten zu verhindern) Und das Programm kann man insofern ändern, das es den Deadlock abfängt und weitere Sachen macht, und genau das würde mich interessieren, wie das andere machen.