sql >> Databasteknik >  >> RDS >> PostgreSQL

Ska jag inkludera SELECT i en transaktion?

Den korta versionen:"Det beror på".

Den långa versionen:

Om du gör en läs-modifiera-skriv-cykel måste den inte bara vara i en transaktion, utan du måste SELECT ... FOR UPDATE alla poster som du senare tänker ändra. Annars riskerar du förlorade skrivningar, där du skriver över en uppdatering som någon annan gjort mellan när du läste posten och när du skrev uppdateringen.

SERIALIZABLE transaktionsisolering kan också hjälpa till med detta.

Du måste verkligen förstå samtidighet och isolering. Tyvärr är det enda enkla, lätta "gör bara X"-svaret utan att förstå det att börja varje transaktion genom att låsa alla inblandade tabeller. De flesta människor vill inte göra det.

Jag föreslår en läsning (eller två, tre eller fyra - det är svårt material) av tx-isoleringsdokumenten . Experimentera med samtidig psql sessioner (flera terminaler) för att skapa tävlingsförhållanden och konflikter.



  1. Flera databaser med lite föränderliga modeller. Hur tillåter jag att Entity Framework tar bort kolumner under körning?

  2. Hur skapar jag en passthrough-fråga i access med en DSN-fri anslutning?

  3. Dynamic Sampling Killing Me i 12c

  4. Hur subtraherar man 30 dagar från den aktuella datetime i mysql?