sql >> Databasteknik >  >> RDS >> Oracle

Tävlingsvillkor mellan val och uppdatering

Jag antar att din UPDATE uttalandet självt verifierar lastmodified värde som du läser i din SELECT uttalande som ninesided antyder.

Om lastmodified är ett DATE , då finns det ett potentiellt tävlingstillstånd om det finns flera uppdateringar av samma rad under samma sekund sedan en DATE har bara granularitet till den andra. Om lastmodified är en TIMESTAMP , å andra sidan är fönstret där tävlingsförhållandet kan inträffa mycket mer begränsat eftersom en TIMESTAMP kommer att ha mellan 3 och 9 siffror av subsekunders precision (3 på de flesta Windows-maskiner, 6 på de flesta Unix-maskiner). Det är ganska osannolikt men inte omöjligt att du skulle ha två uppdateringar på samma millisekund eller till och med samma mikrosekund. Men det är inte ofelbart.

Du kan använda ett sekvensgenererat värde istället för ett senast ändrat datum. Det kan garantera att du inte förlorar en uppdatering eftersom en NOCYCLE-sekvens inte returnerar samma värde två gånger. Men om du går in på den vägen, förlorar du antingen informationsfördelen med att ha ett senaste uppdateringsdatum på varje rad eller så lagrar du några extra byte med data på varje rad i tabellen. Endera av dessa kompromisser kan vara värt det beroende på din applikation eller kan skapa fler problem än det löser.



  1. Mysql ändra kolumnnamn från grupp till group_code

  2. MySQL Workbench visar inte frågeresultat

  3. Använder Python för att komma åt SQL med ett variabelt kolumnnamn

  4. Är databasutlösare säkra för integritetsbegränsningar över tabeller?