sql >> Databáze >  >> RDS >> Oracle

Podmínky závodu mezi výběrem a aktualizací

Předpokládám, že vaše UPDATE samotný příkaz ověřuje lastmodified hodnotu, kterou si přečtete ve svém SELECT prohlášení, jak navrhuje devítistranný.

Pokud lastmodified je DATE , pak existuje potenciální spor, pokud je od DATE více aktualizací stejného řádku ve stejnou sekundu má pouze granularitu na druhou. Pokud lastmodified je TIMESTAMP , na druhou stranu, okno, ve kterém může dojít ke sporu, je mnohem omezenější, protože TIMESTAMP bude mít 3 až 9 číslic s přesností pod sekundu (3 na většině počítačů Windows, 6 na většině počítačů Unix). Je docela nepravděpodobné, i když ne nemožné, že byste měli dvě aktualizace ve stejnou milisekundu nebo dokonce stejnou mikrosekundu. Ale není to neomylné.

Místo data poslední změny můžete použít hodnotu vygenerovanou sekvencí. To může zaručit, že neztratíte aktualizaci, protože sekvence NOCYCLE nevrátí stejnou hodnotu dvakrát. Pokud se však vydáte touto cestou, buď ztratíte informační výhodu, že datum poslední aktualizace bude na každém řádku, nebo uložíte pár bajtů dat navíc v každém řádku tabulky. Každý z těchto kompromisů může stát za to v závislosti na vaší aplikaci, nebo může způsobit více problémů, než vyřeší.



  1. Umístěte událost do protokolu událostí Windows pomocí Oracle

  2. Jaký je nejlepší způsob ukládání citlivých dat v MySQL?

  3. Ignorujte konkrétní kritéria WHERE

  4. Jaká je definice mohutnosti v SQL