sql >> Databáze >  >> RDS >> PostgreSQL

Mám zahrnout SELECTy do transakce?

Krátká verze:"To závisí".

Dlouhá verze:

Pokud provádíte cyklus čtení-úpravy-zápisu, pak to nejen musí být v transakci, ale musíte SELECT ... FOR UPDATE jakékoli záznamy, které chcete později upravit. V opačném případě riskujete ztrátu zápisů, kdy přepíšete aktualizaci provedenou někým jiným v době mezi čtením záznamu a zapisováním aktualizace.

SERIALIZABLE s tím může pomoci také izolace transakcí.

Opravdu musíte pochopit souběžnost a izolaci. Bohužel jedinou jednoduchou a snadnou odpovědí „stačí udělat X“, aniž byste jí rozuměli, je začít každou transakci uzamčením všech zúčastněných tabulek. Většina lidí to nechce udělat.

Doporučuji přečíst (nebo dva, tři nebo čtyři – je to tvrdý materiál) dokumenty k izolaci TX . Experimentujte se souběžným psql relací (více terminálů) k vytvoření podmínek závodu a konfliktů.



  1. Získejte seznam podporovaných časových pásem v SQL Server (T-SQL)

  2. Vyberte Podrobnosti databáze a názvy tabulek v iSQL plus

  3. MYSQL - Řadit hodnoty časového razítka vzestupně v pořadí, od nejnovější po nejstarší?

  4. Nasaďte projekt Django na Google Cloud App Engine s externími knihovnami