Datensatz sperren

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

  • Datensatz sperren

    Hi

    Ich habe mir eine wunderschöne Änderungsfunktion für meine mySQL-DB in PHP geschrieben. Funktioniert auch super - nur möchte ich jetzt den Datensatz bevor ich in den Änderungsmodus gehe sperren um keine race conditions zu riskieren. Leider habe ich bis jetzt noch keine Möglichkeit dazu gefunden. Geht das bei mySQL überhaupt der muss ich mir da selbst was basteln. Hoffe es kann mir jemand von euch helfen.

  • #2
    Record Locking funzt bei mySQL nur wenn du den InnoDB-Tablehandler verwendest ... :

    schau mal nach SELECT ... FOR UPDATE

    sonst gibt's nur 'n Table locking ... :

    mit LOCK TABLES ...
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Alternativ kannst du natürlich eine zusätzliche Spalte LOCK tinyint unsigned(1) einfügen.
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar


      • #4
        Das mit der LOCK-Spalte verstehe ich jetzt nicht ganz. Nehme an du meinst sobald ich in den Änderungsmodus gehe die Spalte auf 1 setzen und wenn ich fertig bin wieder auf 0. Aber damit verlagere ich das Problem ja nur vom Datensatz auf die Spalte. Oder habe ich da jetzt etwas falsch verstanden.

        Kommentar


        • #5
          Hi

          Wieso Spalte ?

          Es ist so gemeint, dass du wenn du eine Zeile Locken willst - eine 1 reinschreibst - wenn nicht eine 0

          So dann machst du bei allen anfragen ein WHERE LOCK=0 - dann werden nur die Zeilen gelesen die LOCK == 0 sind.

          Gruß
          Tago
          --------------------------------------
          Nachts is kälter als draußen !

          Kommentar


          • #6
            Das ist mir schon klar - aber damit löse ich das Problem ja nicht. Bsp.: 1. Client macht seine Abfrage - bekommt sein Ergebniss und setzt den Befehl ab um LOCK auf eins zu setzen. In diesem Moment wird er unterbrochen.
            2. Client macht seine Abfrage - bekommt sein Ergebniss und setzt die selbe Zeile auf LOCK da ja Client 1 dabei unterbrochen wurde - geht in den Änderungsmodus.
            Client 1 kommt wieder dran setzt die Zeile auf LOCK und geht in den Änderungsmodus. Ergebniss - beide Clients sind im Änderungsmodus für den selben Datensatz (race condition).

            Kommentar

            Lädt...
            X