MySql LOCK TABLES

Thomasio

Erfahrenes Mitglied
Ich habe im MySql Manual folgenden Hinweis gefunden, und der verwirrt mich mehr als er klärt.

Wenn Sie LOCK TABLES einsetzen, müssen Sie alle Tabellen sperren, die Sie in Ihren Abfragen zu benutzen beabsichtigen. Solange die mit einer LOCK TABLES-Anweisung erwirkten Sperren gültig sind, können Sie nicht auf Tabellen zugreifen, die nicht durch die Anweisung gesperrt wurden. Ferner können Sie eine gesperrte Tabelle auch nicht mehrfach in derselben Abfrage verwenden. Benutzen Sie stattdessen Aliase. In diesem Fall müssen Sie allerdings für jeden Alias separat eine Sperre erwirken.

Was heisst da "nicht mehrfach verwenden"? Was soll das mit dem Alias?

Mal angenommen ich will 2 Tabllen sperren, eine nur zum lesen, eine zum schreiben und lesen.
Dann will ich ein halbes Dutzend mysql_query() hintereinander machen, wo ich bunt gemischt aus beiden Tabelle lesen und in die zweite Tabelle schreiben will.
Während dem gesamten Vorgang soll kein anderer Thread gelesene oder geschriebene Daten ändern können.
Das Ganze in MyIsam.
Hier einfach mal ein wildes Beispiel ohne viel Sinn, die Frage ist nur, ob LOCK TABLES hier so funktioniert, wie ich mir das vorstelle?

Code:
mysql_query("LOCK TABLES tabelle1 READ, tabelle2 WRITE");
mysql_fetch_object(mysql_query("SELECT * FROM tabelle1 WHERE irgendwas = 1"));
mysql_fetch_object(mysql_query("SELECT * FROM tabelle2 WHERE irgendwas = 1"));
mysql_query("UPDATE tabelle2 SET sonstwas = 17 WHERE irgendwas <> 1");
mysql_fetch_object(mysql_query("SELECT * FROM tabelle1 WHERE sonstwas > 10"));
mysql_fetch_object(mysql_query("SELECT * FROM tabelle2 WHERE sonstwas > 10"));
mysql_query("DELETE FROM tabelle2 WHERE sonstwas < 11");
mysql_query("INSERT INTO tabelle2 (irgendwas, sonstwas) VALUES (1, 4)");
mysql_fetch_object(mysql_query("SELECT sonstwas FROM tabelle2 WHERE irgendwas = 1"));
mysql_query("UNLOCK TABLES");
 
Zurück