Alle,So lösen Sie Concurrency-Problem?
Ich benutze MySql 5.7 in meiner Anwendung. Ich versuche, meine Speicherfunktion Concurrency Safe zu machen. Ich werde das mit einem Beispiel erklären.
Beispiel: Ich habe zwei Admin Benutzer Admin 1 und Admin 2. Wir haben eine Produkttabelle und wir haben einen Produkttabelleneintrag mit Produktcode "P1". Angenommen, Admin 1 und Admin 2 sind im System angemeldet und versuchen, den Produkteintrag mit dem Code "P1" gleichzeitig zu aktualisieren.
Ich muss einen der Benutzer informieren, dass die Datensätze, die Sie versuchen zu ändern, von einem anderen Benutzer aktualisiert wird, und versuchen Sie es nach einiger Zeit erneut.
Ich benutze Transaktion und änderte nicht MySql Standard-Transaktionslevel (wiederholbar lesen). Ich versuche, es zu lösen, indem ich "FÜR AKTUALISIERUNG WÄHLEN" benutze (eingeschlossen eine wo Bedingung, um mit geänderter Zeit zu überprüfen). Diese "Where" -Bedingung wird das Concurrency-Problem für jene Transaktionen lösen, die bereits festgeschrieben sind. Wenn jedoch zwei Transaktionen gleichzeitig gestartet werden und die erste Transaktion vor dem Sperrzeitlimit festgeschrieben wird, überschreibt die zweite Transaktion beim Ausführen der zweiten Transaktion die erste Transaktion.
bitte Ihre Ideen
Vielen Dank im Voraus
teilen
Sie könnten einfach eine 'LOCK TABLES Produkt WRITE' machen, bevor der kritische Abschnitt auftaucht. Vergiss nicht danach zu entsperren. – apokryfos
@apokryfos Sperren einer ganzen Tabelle zu einem Ende eine Bearbeitung eines einzelnen Datensatzes ist nicht wirklich eine effiziente Lösung – Shadow
Ich denke, es kann eine der Lösung sein: Verwenden Sie InnoDB-Engine und 'wählen Sie ... für das Update ' – Wizard