LOCK Tables vermeiden

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

  • LOCK Tables vermeiden

    Hi,
    ich habe folgendes script:
    PHP-Code:
    mysql_query("LOCK TABLES counter WRITE");    
                        
    mysql_query("UPDATE counter SET counter=counter+1 WHERE id=2");
                
    $nr mysql_result(mysql_query("SELECT counter FROM counter WHERE id=2"),0);
                
    mysql_query("UNLOCK TABLES;"); 
    gibt es eine möglichkeit LOCK TABLES zu umgehen? ich hätte daran gedacht den wert von counter in eine mysql variable zu speichern und dann beim SELECT die variable abzufragen.

    Gruss
    Jakob

  • #2
    gibt es eine möglichkeit LOCK TABLES zu umgehen?
    umgehen? weißt du denn, wozu das gut ist? dann würde "umgehen" nämlich bedeuten, dass du eine kollision beim lesen/schreiben provozieren möchtest, was i.a. als nicht erwünscht angesehen wird. was willst du wirklich machen?
    ich hätte daran gedacht den wert von counter in eine mysql variable zu speichern und dann beim SELECT die variable abzufragen.
    in eine variable? wozu? wenn die verbindung zur db beendet wird, ist der wert weg. und das geschieht in so einem skript ganz schnell.

    Kommentar


    • #3
      das script ist von mir und ich verwende auch LOCK TABLES um eine kollision zu vermeiden , aber wenn LOCK TABLES aktiviert müssen ja die ganzen anderen abfragen warten und das möchte ich vermeiden.

      das die variable wieder gelöscht wird ist mir schon klar deswegen möchte ich sie auch vorher mit SELECT abfragen

      [edit]
      so müsste es doch funktioniern oder?

      PHP-Code:
                          
      mysql_query
      ("UPDATE counter SET counter=(@counter := counter+1) WHERE id=2;");
                  
      $nr mysql_result(mysql_query("SELECT @counter;"),0); 
      Zuletzt geändert von TimeRaider; 29.12.2006, 12:14.

      Kommentar


      • #4
        das script ist von mir und ich verwende auch LOCK TABLES um eine kollision zu vermeiden , aber wenn LOCK TABLES aktiviert müssen ja die ganzen anderen abfragen warten und das möchte ich vermeiden.
        Na was denn nu? Dürfen andere Scripte(/"Besucher") der counter erhöhen, obwohl du den aktuellen stand noch nicht ausgelesen hast, oder nicht?

        in meinen augen darfst du das lock einfach weg lassen. denn, wen interessiert es bei einem counter, ob zwischenzeitlich erhöht wurde oder nicht? es ist doch sogar besser, wenn du schon angezeigt bekommst, dass der counter (kurz vor dem zeitpunkt des lesens) schon weiter erhöht wurde. denn das ist schließlich tatsache.

        Kommentar


        • #5
          nein andere scripte dürfen den counter nicht erhöhen solang ich den aktuellen stand nicht ausgelesen habe, deswegen ja auch das LOCK TABLES.
          aber
          PHP-Code:
          mysql_query("UPDATE counter SET counter=(@counter := counter+1) WHERE id=2;");
                      
          $nr mysql_result(mysql_query("SELECT @counter;"),0); 
          müsste doch genauso funktionieren wie mit LOCK TABLES

          Kommentar


          • #6
            wenn das so fatal ist, dann wirst du wohl nicht drumherum kommen.

            müsste doch genauso funktionieren wie mit LOCK TABLES
            ausprobiert?

            Kommentar


            • #7
              funktionieren tuts, aber ich bin mir nicht ganz sicher ob auch andere scripte auf die variable @counter zugreifen können

              Kommentar

              Lädt...
              X