- 20 April 2006
- 22.682
- 1.316
'n Abend.
Ich habe gerade etwas ausgetüfftelt, möchte mir aber vorher noch mal ne Bestätigung einholen, dass das auch wirklich funktioniert, wie ich mir das vorstelle.
Die Situation vereinfacht:
Ich habe eine Tabelle, in der ich ein Flag setzen kann. Ist es gesetzt ("Spalte hat den Wert 1"), soll das Script eine bestimmte Aktion ausführen und das Flag löschen (die Spalte also wieder auf 0 setzen). Ist es nicht gesetzt, dann eben nicht.
Wichtig ist, dass die Aktion nur genau einmal ausgeführt werden darf !
Rufen 2 Clienten gleichzeitig das Script auf, hätte ich ja sonst das Problem, dass beide den Wert 1 lesen und beide die Aktion ausführen, was nicht gewünscht ist.
Seh ich das richtig, dass ich mit
die korrekte Lösung habe ?
Manual-Link:
https://dev.mysql.com/doc/refman/5.1/en/lock-tables.html
Ich habe gerade etwas ausgetüfftelt, möchte mir aber vorher noch mal ne Bestätigung einholen, dass das auch wirklich funktioniert, wie ich mir das vorstelle.
Die Situation vereinfacht:
Ich habe eine Tabelle, in der ich ein Flag setzen kann. Ist es gesetzt ("Spalte hat den Wert 1"), soll das Script eine bestimmte Aktion ausführen und das Flag löschen (die Spalte also wieder auf 0 setzen). Ist es nicht gesetzt, dann eben nicht.
Wichtig ist, dass die Aktion nur genau einmal ausgeführt werden darf !
Rufen 2 Clienten gleichzeitig das Script auf, hätte ich ja sonst das Problem, dass beide den Wert 1 lesen und beide die Aktion ausführen, was nicht gewünscht ist.
Seh ich das richtig, dass ich mit
Code:
[FONT=Courier New][B][COLOR=DarkOrchid]LOCK TABLES[/COLOR][/B] `mytable` [B][COLOR=DarkOrchid]WRITE[/COLOR][/B][COLOR=black];[/COLOR][B][COLOR=DarkOrchid]
[/COLOR][/B][/FONT][FONT=Courier New][I][COLOR=DarkOrange]# ^-- ab hier warten andere Clienten, sollten sie
# auch LOCK TABLES oder SELECT ausführen wollen[/COLOR][/I][/FONT][FONT=Courier New][B][COLOR=DarkOrchid]
SELECT[/COLOR][/B] `flag` [B][COLOR=DarkOrchid]FROM [/COLOR][/B]`mytable`[/FONT][FONT=Courier New][COLOR=black];[/COLOR][/FONT][FONT=Courier New][I][COLOR=DarkOrange]
# hier in PHP flag auswerten und sichern[/COLOR][/I]
[B][COLOR=DarkOrchid]UPDATE[/COLOR][/B] `mytable` [B][COLOR=DarkOrchid]SET [/COLOR][/B]`flag`=0[/FONT][FONT=Courier New][COLOR=black];[/COLOR][/FONT][FONT=Courier New] [I][COLOR=DarkOrange]# wenn Flag gesetzt, resetten[/COLOR][/I]
[B][COLOR=DarkOrchid]UNLOCK TABLES[/COLOR][/B][/FONT][FONT=Courier New][COLOR=black];[/COLOR][/FONT][FONT=Courier New]
[I][COLOR=DarkOrange]# in aller Ruhe die Aktion durchführen, falls flag gesetzt war[/COLOR][/I][/FONT]
Manual-Link:
https://dev.mysql.com/doc/refman/5.1/en/lock-tables.html