phpbar.de logo

Mailinglisten-Archive

Re: Locks
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Locks



Yann Sénécheau schrieb:
> Wie kann man gesetzte Locks abfragen?
> 
> Mit LOCK TABLES TEST WRITE setze ich einen Write Lock auf test.
> Eine andere Session soll ohne Wartezeiten wissen koennen, welche tables frei
> sind (da sonst kein Login in das Programm moeglich).

Genau die gleiche Frage habe ich vor kurzer Zeit auch gestellt,
aber leider keine Antwort erhalten.
Wenn man ein solches Lock setzt, und ein anderer Client
möchte lesen, so wartet der andere Client solange, bis
das Lock aufgehoben wird (Das kann in bestimmten Fällen 
ja dauern ...).

Also so gehts nicht.

Ich arbeite jetzt mit kooperativem Locking 
allerdings in Delphi so:

{--------------------------------------------------------------------}
function GetLock(Tabname:string):boolean;
{Kooperatives Lock einrichten: Nicht die Tabelle wird gesperrt
 sondern nur die Zeichenkette, die allerdings vereinbarungsgemäß
 die Tabelle repräsentieren kann.  (dubois S.654)}
var AQu:TMySQLQuery;
begin
AQu:=TMySQLQuery.Create(NIL);
result:=false;
With AQu do
     begin
     Database:=SVWForm.SVWDatabase;
     Close; SQL.Clear;
     SQL.Add('select get_lock("'+Tabname+'",0)');
     Open;
     if Fields[0].AsInteger=1 then result:=true;
     Close;
     end;
AQu.Free;
end;
{--------------------------------------------------------------------}
function ReleaseLock(Tabname:string):boolean;
{Kooperatives Lock freigeben}
var AQu:TMySQLQuery;
begin
AQu:=TMySQLQuery.Create(NIL);
result:=false;
With AQu do
     begin
     Database:=SVWForm.SVWDatabase;
     Close; SQL.Clear;
     SQL.Add('select release_lock("'+Tabname+'")');
     Open;
     if Fields[0].AsInteger=1 then result:=true;
     Close;
     end;
AQu.Free;
end;
{--------------------------------------------------------------------}

Der zweite Client erhält beim Aufruf von GetLock auf den 
gleichen String bei obiger Funktion "false" zurück.
Er kann aber weiterhin lesen und schreiben.
Der Programmierer entscheidet im Client, ob er darf.
Vielleicht hilfts dir ja auch.
Vielleicht kennt jemand noch eine bessere Lösung.

-- 
Gruß
Dieter Spieß
Mail: mailto:Dieter.Spiess_(at)_t-online.de
Home: http://www.dieter-spiess.de

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive