sql >> Databáze >  >> RDS >> Mysql

MySQL InnoDB:Rozdíl mezi „PRO AKTUALIZACI“ a „ZAMKNUTÍ V REŽIMU SDÍLENÍ“

Snažil jsem se pochopit rozdíl mezi těmito dvěma. Zdokumentuji, co jsem našel, v naději, že to bude užitečné pro další osobu.

Oba LOCK IN SHARE MODE a FOR UPDATE Ujistěte se, že žádná jiná transakce nemůže aktualizovat vybrané řádky. Rozdíl mezi nimi je v tom, jak zacházejí se zámky při čtení dat.

LOCK IN SHARE MODE nezabrání jiné transakci ve čtení stejného řádku, který byl uzamčen.

FOR UPDATE zabraňuje dalším uzamykatelným čtením stejného řádku (nezamknutá čtení mohou stále číst tento řádek; LOCK IN SHARE MODE a FOR UPDATE zamykají čtení).

To je důležité v případech, jako je aktualizace počítadel, kdy čtete hodnotu v jednom příkazu a aktualizujete hodnotu v jiném. Zde pomocí LOCK IN SHARE MODE umožní 2 transakcím přečíst stejnou počáteční hodnotu. Pokud se tedy počítadlo zvýšilo o 1 oběma transakcemi, konečný počet se může zvýšit pouze o 1 – protože obě transakce zpočátku četly stejnou hodnotu.

Pomocí FOR UPDATE by zablokoval 2. transakci od načtení hodnoty do provedení první. Tím zajistíte, že se počítadlo zvýší o 2.



  1. Jak zrušit databázi PostgreSQL, pokud k ní existují aktivní připojení?

  2. Jak dotazovat pole jsonb pomocí operátoru IN

  3. Maximální délka sloupce JSON v MySQL

  4. soubor mysql.h nelze nalézt