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

Chování MySQL „vybrat pro aktualizaci“.

Dovolte mi projít vaše případy a vysvětlit, jak tyto zámky fungují:

1 případ

T1 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce umístí zámek IX na všechny tabulky a zámek X na prvních 5 řádků.

T2 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce vloží zámek IX (protože IX je kompatibilní s IX) na všechny tabulky a pokusí se o prvních 5 řádků, ale nemůže to udělat, protože X není kompatibilní s X

Takže jsme v pořádku.

Případ 2.1

T1 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce umístila zámek IX na všechny tabulky a zámek X na prvních 5 řádků.

T2 chce vybrat některé řádky z vaší testovací tabulky. A neumisťuje žádné zámky (protože InnoDB poskytuje nezamykatelné čtení)

Případ 2.1

T1 chce aktualizovat některé řádky ve vaší testovací tabulce. Tato transakce umístila zámek IX na všechny tabulky a zámek X na prvních 5 řádků.

T2 chce aktualizovat (vybrat pro aktualizaci) některé řádky z vaší testovací tabulky. Umístěte IS na celý stůl a pokuste se získat zámek S na řádku a selže, protože X a S nejsou kompatibilní.

Vždy si také uvědomte úroveň izolace:různá úroveň způsobí, že jiný mechanismus uvolní/získá zámky

Doufám, že to pomůže




  1. Jedna tabulka Mysql s více sloupci TIMESTAMP

  2. Jak můžete spustit stejný dotaz vícekrát pomocí smyčky v PL/SQL?

  3. Jak zašifrovat zálohy MySQL a MariaDB

  4. Jak nastavit databázovou poštu na serveru SQL Server (SSMS)