Legen Sie beim Festschreiben der Transaktion automatisch den SERIAL-Wert fest.

Sag, ich habe eine Tabelle, in der ich ein @ verwenden möchserial als Primärschlüssel, um Änderungen vom Client anzufordern. Der Client fragt "Gib mir die Änderungen nach Schlüssel X". Ohne zu benutzenSERIALIZABLE Isolationsstufe oder Sperrung, dies ist anfällig für Rennbedingungen.

Transaction A kann zuerst starten und seine Schreibvorgänge ausführen, und dann eine lange Zeit zum Festschreiben benötigen. In der Zwischenzeit wird Transaktion B gestartet und festgeschrieben, bevor A festgeschrieben wird. Das Schreiben von B erhält einen höheren Primärschlüssel als das Schreiben von A. Wenn ein Client jetzt nach Änderungen fragt, wird das noch nicht festgeschriebene Schreiben von A übersehen und der neueste höchste Primärschlüssel notiert. Selbst nach dem Festschreiben von A wird der Client diese Änderung nie sehen, da sein Schlüssel niedriger ist als die Änderung, die der Client bereits erhalten hat.

Ist es möglich, den Wert eines @ zu machserial (oder ähnliches von einem Zähler) wird atomar zum Festschreibungszeitpunkt bestimmt, so dass wir garantiert sind, dass es höher als alle anderen ist, wenn es festgeschrieben wird, und niedriger als alle, die danach festgeschrieben werden? Wenn nicht, was ist der beste Weg, um dieses Problem zu lösen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage