|
|
|
|
|
|
|
#1 (permalink) |
|
Neuer Benutzer
Registriert seit: 22.01.2010
Beiträge: 25
PHP-Kenntnisse: Fortgeschritten ![]() |
Hm.
Ich häng' grad bissl in der Luft. Mag mir jemand die grundlegende Vorgehensweise kurz skizzieren, wie ich vorgehen muss, damit ich einem User für eine bestimmte Zeit alleinigen Schreib-Zugriff auf eine Tabelle geben kann und andere User, die schreibend darauf zugreifen möchten, derweil warten lasse... das php Script für diese User also solange in eine Schleife oder etwas schicke, bis das Lock aufgehoben ist? (So stell ich mir die Realisierung zumindest vor) Latsch hier die Bibliothek ab und bemüh google... aber so richtig 'nen Durchblick krieg ich nicht. Grad was das Zusammenspiel von MySQL und PHP in der Sache angeht... |
|
|
|
|
|
|
|
PHP Code Flüsterer
Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten
|
|
|
|
#4 (permalink) |
|
moderatives Dielektrikum
Registriert seit: 21.05.2008
Beiträge: 21.292
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Warum müssen die denn warten?
__________________
-- „Eins ist Fakt: Gescannt wird nackt!“ Privatsphäre 2.0 - Nacktscanner mit Eyetracking. Unser Flugzeug darf kein geschlechtsfreier Raum sein. -- |
|
|
|
|
|
#5 (permalink) |
|
Neuer Benutzer
Registriert seit: 22.01.2010
Beiträge: 25
PHP-Kenntnisse: Fortgeschritten ![]() |
Weil sie eventuell Updates an der Tabelle vornehmen müssen, die der User zuvor noch nicht gemacht hat.
Arbeiten beide gleichzeitig darauf gibt's aber böse Überschneidungen. Hab mir eigentlich eingebildet, daß sowas 'n Standardproblem ist. *kopfkratz* Auszuschließen, daß mehrere User gleichzeitig auf 'ner Tabelle rumorgeln und dem zweiten User nicht nur'n Fehler in's Gesicht zu werfen. (K.a. was passiert, wenn ein User auf eine ge-LOCK-te Tabelle schreibend zugreifen will, ich geh aber mal von 'nem Fehler aus...). |
|
|
|
|
|
#6 (permalink) |
|
Erfahrener Benutzer
Registriert seit: 26.07.2006
Beiträge: 121
![]() |
Hallo,
das ganze ist mit mysql_query zu realisieren. Als Aufruf musst Du dann die entsprechenden MYSQL spezifischen SQL-Kommandos nacheinander abarbeiten. Code:
mysql_query( "LOCK TABLES mytable; INSERT INTO ..... ; UNLOCK TABLES mytable"); Eine andere Alternative ist, dass Du Dir in einer separaten Tabelle ein Semaphoren-Speicher baust, mit dem Du gleichzeitig Sperre und Queue der Abarbeitungsfolgen hinterlegst. Dazu legst Du bei Start einer Abfrage einen Entrag an und nach Ende löschst Du ihn. Außerdem markierst Du, ob Du Exklusiv oder Shared zugreifen willst. Soll Exklusiv zugegriffen werden, prüfst Du, ob niemand jemand bereits exklusiv arbeitet und ob du an erster Stelle stehst. Dann markierst Du Dich als aktiv, prüfst, ob alle shared actions abgearbeitet wurden und führst dann Deine exklusiven Befehle aus. Anschließend entfernst Du den Eintrag ... Das ganze sollte auch noch eine Timeout-Überprüfung der Einträge enthalten. Gruß, Jumper, the II. |
|
|
|
|
|
#7 (permalink) |
|
moderatives Dielektrikum
Registriert seit: 21.05.2008
Beiträge: 21.292
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ich frage deshalb, weil es bspw. READ und WRITE Locks gibt, weil die Anzahl der beteiligten Tabellen relevant ist, mySql auch vieles selbst löst und mit InnoDB sogar noch ein Stück besser. Deine Frage ist also schlicht zu allgemein geschrieben.
__________________
-- „Eins ist Fakt: Gescannt wird nackt!“ Privatsphäre 2.0 - Nacktscanner mit Eyetracking. Unser Flugzeug darf kein geschlechtsfreier Raum sein. -- |
|
|
|
|
|
#8 (permalink) |
|
Neuer Benutzer
Registriert seit: 22.01.2010
Beiträge: 25
PHP-Kenntnisse: Fortgeschritten ![]() |
@JumperII:
Zum Zeitpunkt zu der ich die Tabelle sperren möchte, weiß ich noch nicht, wieviele Einträge ich verändern muss... leider. So kann ich auch nicht alles in einen Ausdruck packen. An einen Sempahorenwert hatte ich tatsächlich auch schon gedacht. Sah hier nur die Gefahr, daß wieder zwei gleichzeitig die Tabelle sperren. (wenn's ganz dumm läuft) Bei Lock hätte ich noch eine Art Rückgabe erwartet, die mir sagt ob das Locken für mich erfolgreich war. So bleibt für mich aber dann weiterhin das Problem... wie lasse ich die User warten, die grad auch schreiben wollen? Ich trau dem Braten nicht, wenn ich checke ob ein Semaphor gesetzt ist und wenn nicht, dann einen setze. Auch hier könnten ja zwei User gleichzeitig auf die Idee kommen. Dachte an irgendwas wie... PHP-Code:
Hmm... ich könnte in den Sempahor natürlich noch die User_id mit einbauen. Dann wär's eindeutig. 1) Check ob Semaphor gesetzt 2) Wenn nicht, setze meine user_id + Rechte 3) SELECT: wenn MEINE user_id + Rechte gesetzt, leg los... Das ganze am besten in einem Aufwasch... *kopfkratz* Vielleicht mit einem mysqli_multi_query()? Ich hoffe, da kann dann nicht nochmal ein User dazwischen... Denk ich zu kompliziert? @nikosch: Es sind 3 Tabellen... wobei es schon reichen würde, eine zu sperren und die anderen user solange warten zu lassen. Geändert von Samhayne (08.02.2010 um 19:11 Uhr). |
|
|
|
|
|
#10 (permalink) |
|
Neuer Benutzer
Registriert seit: 22.01.2010
Beiträge: 25
PHP-Kenntnisse: Fortgeschritten ![]() |
Ich hatte JumperII falsch verstanden... ich hab mir Transactions bisher noch nicht angeguckt.
Werd' ich morgen mal tun... Wie handle ich es dann da, daß die anderen User warten bis die Transaction beendet ist, so daß die danach ihre machen können? |
|
|
|
|
|
|
|
PHP Code Flüsterer
Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten
|
|
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] mysql_insert_id () und LOCK TABLES | Senifor | PHP Einsteiger | 2 | 29.10.2009 15:40 |
| [Erledigt] breadcrumb 2 Tables mit Subcategories | fulltilt | PHP Einsteiger | 6 | 19.09.2009 07:57 |
| Kann LOCK TABLES zu Absturz der MySQL Datenbank führen? | kat_2403 | Datenbanken | 2 | 03.09.2009 15:22 |
| mysqlabfrage mit 2 tables (COUNT?) | mqs | PHP Einsteiger | 6 | 17.06.2009 12:49 |
| Welche Tables muss ich erstellen? | She-Sign.de | Datenbanken | 2 | 12.05.2009 19:54 |
| [Erledigt] LOCK TABLES - Thread statt Table??? | Curanai | Datenbanken | 1 | 04.04.2009 01:33 |
| [Erledigt] Problem bei delete über 2 tables | fulltilt | PHP Einsteiger | 3 | 24.02.2009 22:29 |
| Impossible WHERE noticed after reading const tables | Gumfuzi | Datenbanken | 6 | 03.01.2009 10:53 |
| Extrahieren aus 2 Tables mit einem bekannten Wert | ssm | Datenbanken | 12 | 23.03.2006 20:29 |
| Tables | Schubi | PHP Tipps 2005-2 | 0 | 05.08.2005 15:09 |
| Tables | Schubi | PHP Tipps 2005-2 | 0 | 05.08.2005 15:08 |
| Tables | PHP Tipps 2005-2 | 0 | 05.08.2005 13:39 | |
| LOCK TABLES / LAST_INSERT_ID | AliceD | Datenbanken | 3 | 20.07.2005 13:45 |
| Suche zufalls(bild)script das in tables läuft... | Beitragsarchiv | 0 | 05.07.2005 12:18 | |
| SHOW PROCESSLIST und TEMPORARY TABLES | tapferesschneiderlein | Datenbanken | 2 | 05.03.2005 11:40 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| php innodb mysql_query lock, php lock tables, php mysql_query lock, lock tables, table sperren php, sql update timeout danach sperre, php mysql_query lock tables html, \lock tables\, php mysql_query lock tables read, php lock, lock table php, sobald transaktion eines anderen users beendet, mysql gleichzeitiger zugriff lock table, wann lock tables, lock tables warten, php transactions und locking, user aus transaktionen schmeißen |