Ich habe eine Zeile mit einem Integer-Wert, es gibt viele gleichzeitige Anfragen in dieser Zeile, ich möchte, dass jede Leseoperation von einer Aktualisierungsoperation (Inkrement) gefolgt wird, und die Daten konsistent zu halten, nur eine Anfrage kann lesen > gleichzeitig aktualisieren. Ich habe ein paar Nachforschungen gemacht und herausgefunden, die select_for_update(), und ich dachte auch an einen Trigger auf SELECT, um den Wert zu erhöhen, nachdem es ausgewählt ist, ist die Frage .. Wird das funktionieren, wie ich annehme ?
Arbeitet der Trigger parallel oder ist er konsistent?MySQL select_for_update() und löst aus .. wie funktioniert das Blockieren?
2
A
Antwort
1
Der Django select_for_update
ist ein Wrapper für die select ... for update
Funktion in den meisten gängigen Datenbanken (Postgres, Mysql, Oracle ...), die im Grunde die ausgewählten Zeilen gegen gleichzeitige Updates sperrt.
Sie müssen die Sperre in eine Transaktion wickeln, so wird der Zugang gesperrt werden, bis die Ausführung der Transaktion endet.
Verwandte Themen
- 1. select_for_update in Entwicklung Django
- 2. blockieren und nicht blockieren Unterprozessaufrufe
- 3. Animation löst nur das erste Mal aus
- 4. Wie funktioniert das Pivotieren mit MySQL?
- 5. Wie funktioniert das restangular mit MySQL Datenbank
- 6. "Select_for_update" von einem atomaren Block noch TransactionManagementError
- 7. Wie löst man das Änderungsereignis von jQuery asuals Adressplugin aus?
- 8. Wie löst man das optimal?
- 9. Das fire onItemDisclosure-Ereignis löst das Ereignis itailtap aus
- 10. Native Abfrage löst InvalidDataAccessApiUsageException aus
- 11. ObservableArray.push() löst Klickereignis aus
- 12. recursive_directory_iterator löst Ausnahme aus
- 13. Gibt es eine Möglichkeit, das Blockieren von StringIO zu blockieren
- 14. InetAddress.getAllByName() löst UnknownHostException aus
- 15. Surefire löst jacoco aus, und das will eine minimale Abdeckung. Ich muss das für jetzt deaktivieren
- 16. Wie löst man den Eintrag in MySQL?
- 17. HTTPWebRequest.GetResponse() löst Verbindungsfehlerausnahme aus
- 18. Wie svn sync blockieren
- 19. Wie man das Problem in Jenkins löst
- 20. mysql löst Probleme auf Update
- 21. Wie löst man alle Checkboxen aus?
- 22. _CRT_DEBUGGER_HOOK löst Ausnahme aus
- 23. Wie löst man das Fehlermodul sklearn.cluster?
- 24. Warum löst das Sitzungsobjekt eine Null-Referenzausnahme aus?
- 25. Response.Flush() löst System.Web.HttpException aus
- 26. Wie funktioniert das Codefalten vom Rand aus?
- 27. setTimeout löst sofort aus
- 28. Die Installation von MySQL 5.6 in Ubuntu 14.04 löst das Entfernen der benötigten Pakete aus
- 29. Easyhook löst eine System.NotSupportedException aus
- 30. Wie löst man dieses Ereignis aus?
Wenn ich eine Transaktion mit transcation.atomic() öffne und select_for_update() innerhalb der transaction.atomic() -Anweisung verwende, werden die Zeilen bis zur allerletzten Zeile des transaction.atomic() Blocks gesperrt? – Kareem
Ja, alle übereinstimmenden Zeilen werden bis zum Ende des Transaktionsblocks gesperrt. Sie können dieses Verhalten testen, indem Sie einen Zeitschlaf in den Transaktionsblock einfügen und versuchen, die Zeilen zu aktualisieren, während sich die Ausführung noch im Block befindet. –
Vielen Dank :) – Kareem