Lock Database

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Lock Database

    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 ?
    Zuletzt geändert von ministry; 14.02.2008, 15:48.
    ich glaube

  • #2
    InnoDB + Transaktion?

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Kommt leider aus Performancegründen nicht in Frage... hab mittlerweile das allermeiste gefunden, aber interessieren, ob es nicht einfacher ginge, täte es mich schon.
      ich glaube

      Kommentar


      • #4
        Hast du keine Einsicht in den Codeblock? Wie kommt man auf die Idee, alle Tabellen vor einem "schwarzen Loch voller SQL-Queries" locken zu müssen?

        Kommentar


        • #5
          natürlich hab ich Einsicht in den Codeblock. Der ruft bloß tausende Sachen aus tausenden Klassen (unwesentlich übertrieben) auf und führt dementsprechend viele verschiedene Queries aus.

          Wie man auf die Idee kommt? Eigentlich kam man vorher auf die Idee, dass man das Locking ja später noch drumrum machen kann, da das ja schnell und einfach geht
          ich glaube

          Kommentar


          • #6
            Ich nehme an, die Queries werden direkt mit mysql_query() oder so abgesetzt?

            Kommentar

            Lädt...
            X