doppelte werte verhindern

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

  • doppelte werte verhindern

    Hallo zusammen!

    ich habe eine Tabelle tab1 in der ein feld wert ist.
    Dieser code wird ausgeführt, wenn jemand seinen Warenkorb abschickt.
    Es soll dann die nächste Auftragsnummer gelesen werden, und sofort um eins erhöht werden.

    PHP-Code:
    Select wert from tab1 WHERE name 'wertfeld' FOR UPDATE
    $aufnr 
    wert;
    Update tab1 SET wert=wert+1 WHERE name 'wertfeld'
    Nun muss folgendes passiert sein:
    zwei user haben die gleiche Auftragsnummer bekommen.
    USER a bestellt und führt Select-Statement aus.
    Noch bevor USER a das Update-Statement ausführt, bestellt User b und führt das Select-Statement aus und bekommt dadurch die gleiche Auftragsnummer.

    bzw. wie kann man diesen Fall verhindern ?


    Gruß jogi

  • #2
    For UPDATE funktioniert nur in Verbindung mit Transaktionen (START TRANSACTION; COMMIT / ROLLBACK) und die wiederum funktionieren nicht mit Standard-MyIsam-Tabellen. InnoDB-Tabellen unterstützen Transaktionen zum Beispiel.

    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
      Man sollte die entsprechende Spalte dann auch auf UNIQUE setzen, so dass die Werte auch wirklich nur einmal auftreten.
      MM Newmedia | MeinBlog

      Kommentar


      • #4
        Ist es MySQL? Dann nimm gleich auto_increment.

        Kommentar


        • #5
          Also ich glaub, ihr versteht mich falsch.

          Weder autoincrement noch unique helfen mir.
          Es ist eine Auftragsnummer, die ich hochzähle, wenn ein Warenkorb abgeschickt wird.

          ich denke ghostgambler Ansatz ist der richtige.


          p.s. es betrifft mysql 5 mit MyISAM-Tabellen.

          Kommentar


          • #6
            Ich denke schon, dass dir auto_increment helfen würde, aber dafür müsstest du mit Sicherheit einiges abändern...

            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
              hi

              ich habe es mit auto_increment + offset gelöst.

              d.h. bei neuanlage eines auftrages in das feld der auftragsnummer
              den auto_increment + offset (aus einer configtabelle) geschrieben und damit eine auftragsnummer generiert.

              bei mir war es dann z. b. 2008000000 + 1 = Auftrag 2008000001
              damit hatte ich immer eine eindeutige auftragsnummer
              und die 2008 halt das aktuelle jahr um die aufträge auch nach jahren schnell zuordnen zu können ;-)

              grüße

              Kommentar

              Lädt...
              X