Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

Firebird: logische Datensatz-Sperre, die immer funktioniert

  Alt 4. Sep 2009, 12:16
Datenbank: FB • Version: 1.5 • Zugriff über: egal
Hallo #,

habe gerade einen netten Problem.

Ein logischer Datensatz soll gesperrt werden,
logisch deshalb, weil das zu speichernde Objekt
intern in mehrere Tabellen gespeichert wird.

Ich kenne "Ich sperre, also bin ich" (Entwickler von anno dazumal).

Dort wurd in etwa folgendes gemacht:
- Lock-Tabelle
- Lock-Eintrag wird versucht eizutragen
(unique index sichert die Eindeutigkeit des Log-Eintrag ab)
- per Timer Lock-Datum ständig aktualisieren
(falls Rechner abstürzt, kann eine zu alte Sperre ignoriert werden)

Wo ich gerade hänge, war die Forderung "read commited" als TIL einzustellen.
Reicht denn der unique index nicht aus ?
Spätestens beim Commit der Transaktion knallt es doch, und man kann dem User sagen
"Datensatz gesperrt".


Die Frage ist also:
Reicht ein unqiue index aus, um die Eindeutigkeit eines Datensatzes zu gewährleisten ?
Ich denke: ja.


Heiko

PS:
Bitte keine Sprüche wie "update table set id=1 where id=1 ".
Der Datensatz muss auch gesperrt werden, wenn er noch gar nicht existiert,
der Nutzer also noch nicht gespeichert hat.
(Ich speicher nicht die DB-ID direkt, das hat andere Gründe).
Heiko
  Mit Zitat antworten Zitat