Zuerstmal: es wird nicht die "Datenbank" gesperrt sondern maximal ein Datensatz. Wobei die Möglichkeit besteht manuell (!) eine gesamte Tabelle zu sperren. Das bezieht sich aber immer auf einen schreibenden Zugriff. Der lesende Zugriff (SELECT ...) wird dadurch niemals verhindert.
Solange die beiden Programme nicht den gleichen Datensatz mittels UPDATE ändern wollen, so werden sie sich auch nicht gegenseitig "sperren".
Du musst schon etwas präziser werden wie genau die Zugriffe Deiner Programme aussehen.
Ein Möglichkeit einen Datensatz explizit zu sperren ist mit "SELECT ... FOR UPDATE NOWAIT". Wenn Du unbedingt pessimistic locking benötigst, so wird bleibt Dir nur jeden Datensatz der geändert werden soll, vorher mit "SELECT .. FOR UPDATE NOWAIT" zu sperren. Wenn das nicht geht bekommst Du sofort einen Fehler. Einen "Timeout" gibt es dabei aber nicht, das müsstest Du selber in Deinem Programm implementiert (z.B. 10mal versuchen und dann aufgeben oder so ähnlich).
Aber nochmal: das ist eigentlich die schlechteste Methode mit einer relationalen DB zu arbeiten. Wenn die Programme nicht wirklich ständig die gleichen, identischen Datensätze ändern wollen, dann überlass das lieber der Datenbank.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Lesezeichen