sql >> Database teknologi >  >> RDS >> PostgreSQL

Skal jeg inkludere SELECT'er i en transaktion?

Den korte version:"Det afhænger af".

Den lange version:

Hvis du laver en læs-modificere-skrive-cyklus, skal den ikke kun være i en transaktion, men du skal SELECT ... FOR UPDATE alle optegnelser, du senere agter at ændre. Ellers risikerer du tabte skrivninger, hvor du overskriver en opdatering, som en anden har lavet mellem det tidspunkt, du læste posten, og da du skrev opdateringen.

SERIALIZABLE transaktionsisolering kan også hjælpe med dette.

Du skal virkelig forstå samtidighed og isolation. Desværre er det eneste enkle, nemme "bare gør X"-svar uden at forstå det, at begynde hver transaktion ved at låse alle de involverede tabeller. De fleste mennesker ønsker ikke at gøre det.

Jeg foreslår en læsning (eller to, eller tre eller fire - det er hårdt materiale) af tx-isolationsdokumenterne . Eksperimenter med samtidig psql sessioner (flere terminaler) for at skabe raceforhold og konflikter.



  1. Sådan udføres en lagret procedure i en udvalgt forespørgsel

  2. Regulært udtryk i PostgreSQL LIKE-sætning

  3. PHP mysqli-forespørgsel giver ingen resultater

  4. sql overordnet underordnet træ med sorteringsrækkefølge