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.