Hallo,
ich muss um einen umfangreichen Codeblock nachträgich ein Tablelocking WRITE machen.
Es kommt mir jetzt so vor, als wäre das fast ein Ding der Unmöglichkeit. Denn
- ich muss _alle_ Tabellen herausfinden, die innerhalb dieses Codeblocks angesprochen werden (sonst kommt Error: Table bla was not locked...)
- zusätzlich muss ich _alle_ verwendeten Tabellenaliase herausfinden, also meinetwegen BLA LEFT JOIN user AS u -> muss gelockt werden mit LOCK TABLE user AS u (sonst kommt Table u was not locked...)
- als ob das nicht genug wäre, scheint es einen Bug zu geben Subselects betreffend. Wenn ich 'tabelleA' und 'tabelleB' gelockt habe und so etwas abfrage wie SELECT bla FROM tabelleB LEFT JOIN tabelleA ON a_id = b_id WHERE a_id = (SELECT blub FROM tabelleC), dann behauptet er, tabelleA wäre nicht gelockt. Es funktioniert nur, wenn ich in dieser Query tabelleA wiederum einen Alias gebe, den ich dann extra locken kann mit LOCK TABLE tabelleA AS a. (MySQL-Version 5.0.27-community-nt)
Wenn das der einzige Weg ist, die Tabellen zu locken, ist das purer Horror und Fehleranfällig noch dazu, da ich jetzt gar nicht sicherstellen kann, alle möglichen Fälle nachstellen zu können um zu testen, ob ich nicht vielleicht doch irgendwas nicht gelockt habe.
Ein LOCK DATABASE würde mein Problem lösen ... ein SHOW TABLES mit Schleife, die alle einzeln lockt wiederum nicht, da SHOW TABLES logischerweise nur die Tabellennamen, nicht aber die Aliase anzeigt.
Jemand ne Idee ?
ich muss um einen umfangreichen Codeblock nachträgich ein Tablelocking WRITE machen.
Es kommt mir jetzt so vor, als wäre das fast ein Ding der Unmöglichkeit. Denn
- ich muss _alle_ Tabellen herausfinden, die innerhalb dieses Codeblocks angesprochen werden (sonst kommt Error: Table bla was not locked...)
- zusätzlich muss ich _alle_ verwendeten Tabellenaliase herausfinden, also meinetwegen BLA LEFT JOIN user AS u -> muss gelockt werden mit LOCK TABLE user AS u (sonst kommt Table u was not locked...)
- als ob das nicht genug wäre, scheint es einen Bug zu geben Subselects betreffend. Wenn ich 'tabelleA' und 'tabelleB' gelockt habe und so etwas abfrage wie SELECT bla FROM tabelleB LEFT JOIN tabelleA ON a_id = b_id WHERE a_id = (SELECT blub FROM tabelleC), dann behauptet er, tabelleA wäre nicht gelockt. Es funktioniert nur, wenn ich in dieser Query tabelleA wiederum einen Alias gebe, den ich dann extra locken kann mit LOCK TABLE tabelleA AS a. (MySQL-Version 5.0.27-community-nt)
Wenn das der einzige Weg ist, die Tabellen zu locken, ist das purer Horror und Fehleranfällig noch dazu, da ich jetzt gar nicht sicherstellen kann, alle möglichen Fälle nachstellen zu können um zu testen, ob ich nicht vielleicht doch irgendwas nicht gelockt habe.
Ein LOCK DATABASE würde mein Problem lösen ... ein SHOW TABLES mit Schleife, die alle einzeln lockt wiederum nicht, da SHOW TABLES logischerweise nur die Tabellennamen, nicht aber die Aliase anzeigt.
Jemand ne Idee ?
Kommentar