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

MySQL:Souběžné aktualizace (prostřednictvím vláken) na jednoduché tabulce

Uzamčení je implicitní, ano, ale neprovádí ho executeUpdate() . Úložný modul v MySQL se stará o zamykání a odemykání.

Kdykoli zapisujete do tabulky MyISAM, váš dotaz čeká, až bude k dispozici zámek zápisu v tabulce, získá se zámek zápisu, provede se zápis a zámek se uvolní. V MyISAM neexistuje žádná skutečná souběžnost zápisu, protože každý pracovník ve skutečnosti čeká ve frontě na zámek zápisu. Chyba se nezobrazí, protože požadavky na zápis jsou serializovány.

Situace s InnoDB je podobná, ale velmi odlišná v tom, že InnoDB zamyká pouze část tabulky, obvykle na úrovni řádků, kde InnoDB může uzamknout rozsah v indexu, čímž uzamkne řádky v tomto rozsahu v indexu (a mezera, která je předchází). Toto zamykání je podrobnější než zamykání tabulky, což umožňuje vylepšené souběžné chování, ale na stejném řádku není žádná souběžná operace – každý pracovník čeká na zámek nebo zámky, které potřebuje.

V obou případech jsou zámky implicitně převzaty.




  1. Jak správně zvládnout zablokování InnoDB v Javě/JDBC?

  2. Jak napsat dotaz, který dělá něco podobného jako GROUP_CONCAT MySQL v Oracle?

  3. Jak navrhnout hierarchický systém řízení přístupu založený na rolích

  4. Rozdíl mezi NullIf() a IfNull() v SQLite