Ich mache Web App und ich möchte eine Tabelle wie Marks_Table die ganze Zeit verfügbar sein, so dass Schüler, selbst wenn ein Lehrer Markierungen hochladen, nicht blockiert werden sollten, um ihre Marken aus dieser Tabelle zu sehen.Wie kann ich eine Transaktion ausführen und die Tabelle nicht sperren, damit andere Änderungen vornehmen können?
Antwort
Zum Beispiel Student hat einen Wert 5 als Klasse in der Tabelle nun wenn Schüler A eine Abfrage durchführt, wird er grade 5
Nun sehen, wenn der Lehrer mit Transaktionen auf diesem Tisch besetzt ist der Student aus keine Ergebnisse bekommt seine Abfrage, bis der Lehrer fertig ist, weil seine Transaktionen die Tabelle sperren.
Was Sie wollen, ist, dass der Student seine Abfrage erhält, während der Lehrer Transaktionen ausführt, er wird nur einen Wert 5 sehen, weil das der letzte commited Wert für ihn in dieser Tabelle war, richtig? Mit anderen Worten, die Schüler können F5 drücken und werden ihre alten Werte sehen, bis der Lehrer neue Werte festlegt, was wie eine normale Vorgehensweise klingt.
Wenn ja, können Sie versuchen, diese: (muss nur einmal in der Datenbank durchgeführt werden)
ALTER DATABASE yourdatabase SET READ_COMMITTED_SNAPSHOT ON;
aber auch bedenken, dass alle Transaktionen auf Tabellen in Ihrer Datenbank sollte so kurz wie möglich gehalten werden, was das Problem in erster Linie vermeiden würde. Kein Student wird sich beschweren, wenn er eine halbe Sekunde warten muss, bis seine Ergebnisse nach dem Auffrischen angezeigt werden. Sie werden sich beschweren, wenn sie Minuten warten müssen.
Ich verwende TransactionScope-Objekt, um die Transaktion abzuschließen und durchzuführen, würde das mein Problem automatisch lösen ?? –
Weil ich gelesen habe, dass es serialize Isolation-Level verwendet –
Ich bin nicht vertraut mit dem TransactionScope-Objekt, aber da diese alter-Anweisung ändert die Art, wie Ihre Datenbank Datensätze liest ich denke, es wird – GuidoG
- 1. Javascript-Erweiterung Fehler: Kann keine Änderungen vornehmen
- 2. Mysql mit innodb und serializable-Transaktion nicht (immer) Zeilen sperren
- 3. Ich kann keine Änderungen an meiner Modelldatei in odoo9 vornehmen
- 4. Wartung - Balancing die Frage, wann und wenn Sie Änderungen vornehmen
- 5. dieselbe Tabelle zweimal sperren
- 6. Eclipse Git - Änderungen gleichzeitig vornehmen
- 7. Wie kann ich eine SQLite-Datenbank sperren?
- 8. Wie man git synchron mit svn hält und gleichzeitig Änderungen an git repo vornehmen kann
- 9. Wie man Änderungen in Ms-Zugang remote vornehmen kann
- 10. Wie kann ich eine variable Seitennummerierung in einem Formular vornehmen?
- 11. Wie kann ich die Seitennummerierung von HABTM-Daten vornehmen?
- 12. iOS-Benachrichtigung erhalten: einige können und die andere kann nicht
- 13. Wie kann ich beim Hover eine CSS-Klassenänderung vornehmen?
- 14. Wie eine Tabelle sperren, wenn die Auswahl Datensätze keine Daten
- 15. Rails + MySQL + Transaktionen + Sperren, wie verhindere ich das Öffnen einer Transaktion aus dem Entsperren der Tabelle?
- 16. Wie kann ich eine nicht übereinstimmende Zeile von einer Tabelle in eine andere alternative Tabelle einfügen?
- 17. C# Wie man Access-Datei sperren und damit arbeiten?
- 18. Wie storniere ich meine eigene Test-In-App-Kauf-Transaktion? (damit ich wieder testen kann)
- 19. Änderungen an Material-Assets in Unity3d vornehmen
- 20. Wie kann ich die Erstkonfiguration der Datenkonfiguration mit CoreData vornehmen?
- 21. Wie kann ich einen Vergleich zwischen Groß- und Kleinschreibung vornehmen?
- 22. Wie kann ich eine Umleitung im Django Template-Tag vornehmen?
- 23. Git - Keine lokalen Änderungen mehr vornehmen
- 24. Ist eine Transaktion, die nur eine einzige isolierte Tabelle aktualisiert?
- 25. Wie kann ich eine Datenbankoperation außerhalb einer Transaktion in Rails/ActiveRecord ausführen
- 26. Wie kann ich eine Akkordeonsteuerung in ASP.NET vornehmen?
- 27. Wie kann ich diese Zeichenfolge kopieren, während Sie diese Änderungen vornehmen
- 28. Wie speichere ich eine Reihe von Abfragen in PostgreSQL, damit ich sie einfach wieder ausführen kann?
- 29. Wie kann ich Pull --rebase ziehen, aber alle remote Änderungen vornehmen?
- 30. Wie Sie die SUMME-Funktion für eine bestimmte Tabelle zweimal verwenden und dann einen Abzug vornehmen
Die Abfragen, die auf die Tabelle verweisen, können den Query-Hinweis 'with (NOLOCK)' verwenden (obwohl das andere Probleme mit inkonsistenten Daten verursachen könnte). Wenn Sie nur eine einzelne Zeile aktualisieren, ist der Aufwand wahrscheinlich gering. –
Hinzufügen 'WITH (NOLOCK)' zu den gelesenen Abfragen? – TZHX
Ich füge mehrere Reihen hinzu –