mysql_insert_id() zeitgleich - Chaos?

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

  • mysql_insert_id() zeitgleich - Chaos?

    Hallo.

    Könnte mir jemand einen Tipp geben, wie ich folgendes Problem lösen könnte?

    Ich habe 4 Cronjobs, die jede Minute Daten holen und in die gleiche Tabelle meiner Datenbank diese auch speichern.

    Ich brauch aber von jedem Eintrag die ID - die ich mir mit mysql_insert_id() hole.

    jetzt ist die wahrscheinlichkeit sehr hoch, das es passieren kann das ich die falsche ID, des anderen gleichzeitigen Cronjobs, bekomme.

    Wie könnte man das verhindern????

    MfG
    Frank

  • #2
    Hi,

    engines verwenden die transaktionen unterstützen z.B. innodb.

    greets
    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

    Kommentar


    • #3
      Original geschrieben von closure
      engines verwenden die transaktionen unterstützen z.B. innodb.
      Hat damit nichts zutun... :P ^^


      The value of mysql_insert_id() is affected only by statements issued within the current client connection. It is not affected by statements issued by other clients.
      D.h. das interessiert kein bisschen ob du einen oder X Cronjobs laufen hast, du kriegst die auto_increment-ID von dem letzten Query des jeweiligen Cronjobs

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

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

      Kommentar


      • #4
        Ist dir das schonmal passiert?

        Warum glaubst du, das könne passieren?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Original geschrieben von ghostgambler
          Hat damit nichts zutun... :P ^^
          Nicht? Andere engines kennen doch kein isolation-level afaik.
          Dann macht es einen unterschied.

          Kannst du mir bitte mal die url geben von der dein zitat stammt.
          Ich hab gerade mal auf php.net

          Anmerkung: Der Wert der MySQL SQL Funktion LAST_INSERT_ID() liefert immer den zuletzt erzeugten AUTO_INCREMENT Wert. Dieser wird zwischen Abfragen nicht zurückgesetzt.
          Bei konkurierenden verbindungen führt das ausserhalb von transaktionen zu
          problemen.
          Benutzt mysql_insert_id nicht intern LAST_INSERT_ID()?
          Dann nehm ich alles zurück.

          greets
          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #6
            Original geschrieben von closure
            Nicht? Andere engines kennen doch kein isolation-level afaik.
            Dann macht es einen unterschied.
            Ich kenne nur mysql ^^,

            Kannst du mir bitte mal die url geben von der dein zitat stammt.
            http://dev.mysql.com/doc/refman/5.1/...insert-id.html

            Benutzt mysql_insert_id nicht intern LAST_INSERT_ID()?
            Die php-Funktion ist nur eine Schnittstelle zur oben verlinkten C-Funktion der mysql-api und da steht ja der Unterschied zwischen der Funktion und LAST_INSERT_ID()

            Nochmal zur Transaktion: Du hast recht, scheinbar *würde* es so auch gehen und dann LAST_INSERT_ID(), ist nur nicht empfehlenswert, siehe http://dev.mysql.com/doc/refman/5.1/...html#id2604376

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

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

            Kommentar


            • #7
              Original geschrieben von closure
              Benutzt mysql_insert_id nicht intern LAST_INSERT_ID()?
              Nein, sondern mysql_insert_id aus der API, und für die gilt:
              The value of mysql_insert_id() is affected only by statements issued within the current client connection.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Ah,
                ok jetzt war ich etwas verwirrt. Ich dachte die ganze zeit wir
                reden von der phpversion von mysql_insert_id.
                Deswegen konnte ich auch kein gleichlautendes statement
                wie das das ghostgambler genannt hat finden.

                Dann weiss ich ja jetzt wovon wir reden und doch bin ich
                etwas (durchaus positiv) überrascht, dass in diesem fall
                konsistenz bei konkurierenden zugriffen, auch ohne transaktionen,
                gewährleistet ist.

                greets
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar


                • #9
                  Original geschrieben von closure
                  Ich dachte die ganze zeit wir reden von der phpversion von mysql_insert_id.
                  Tun wir auch - aber diese PHP-Funktion ruft eben nur die gleichnamige Funktion der API von MySQL auf.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar

                  Lädt...
                  X